OpenCV 분리 가능 필터 구현
이미지 볼 륨 이 든 필터 든 원 이미지 에서 필 터 를 이동 하 는 과정 에서 매번 의 계산 결 과 는 뒤의 과정의 계산 결과 에 영향 을 주지 않 기 때문에 이미지 필 터 는 병렬 알고리즘 으로 병렬 계산 을 제공 할 수 있 는 프로세서 에서 이미지 필터 의 처리 속 도 를 크게 가속 화 할 수 있다.
이미지 필 터 는 분리 성 을 가지 고 있다.
먼저 X(Y)방향 을 필터 한 다음 Y(X)방향 을 필터 한 결 과 는 두 방향의 필 터 를 결합 한 후 전체 필터 의 결과 와 같다.두 방향의 필터 의 결합 은 두 방향의 필 터 를 곱 하여 직사각형 필 터 를 얻 는 것 이다.
void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor = Point(-1,-1),
double delta = 0, int borderType = BORDER_DEFAULT );
src:필터 이미지
void sepFilter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernelX, InputArray kernelY,
Point anchor = Point(-1,-1),
double delta = 0, int borderType = BORDER_DEFAULT );
src:필터 이미지
//
// Created by smallflyfly on 2021/6/15.
//
#include "opencv2/highgui.hpp"
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
float points[] = {
1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19, 20,
21, 22, 23, 24, 25
};
Mat data(5, 5, CV_32FC1, points);
//
Mat gaussX = getGaussianKernel(3, 1);
cout << gaussX << endl;
Mat gaussDstData, gaussDataXY;
GaussianBlur(data, gaussDstData, Size(3, 3), 1, 1, BORDER_CONSTANT);
sepFilter2D(data, gaussDataXY, -1, gaussX, gaussX, Point(-1, -1), 0, BORDER_CONSTANT);
cout << gaussDstData << endl;
cout << gaussDataXY << endl;
cout << "######################################" << endl;
// Y
Mat a = (Mat_<float>(3, 1) << -1, 3, -1);
// X
Mat b = a.reshape(1, 1);
// XY
Mat ab = a * b;
Mat dataX, dataY, dataXY1, dataXY2, dataSepXY;
filter2D(data, dataX, -1, b);
filter2D(dataX, dataXY1, -1, a);
filter2D(data, dataXY2, -1, ab);
sepFilter2D(data, dataSepXY, -1, a, b);
//
cout << dataXY1 << endl;
cout << dataXY2 << endl;
cout << dataSepXY << endl;
Mat im = imread("test.jpg");
resize(im, im, Size(0, 0), 0.5, 0.5);
Mat imX, imY, imXY, imSepXY;
filter2D(im, imX, -1, b);
filter2D(imX, imXY, -1, a);
sepFilter2D(im, imSepXY, -1, a, b);
imshow("imXY", imXY);
imshow("imSepXY", imSepXY);
waitKey(0);
destroyAllWindows();
return 0;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.