I = imread('C:\\Users\\20055316\\Desktop\\blurMetric\\Illumination_Changes\\z_0001.bmp');
I = double(I);
[y, x] = size(I);
Hv = [1 1 1 1 1 1 1 1 1]/9;
Hh = Hv';
B_Ver = imfilter(I,Hv);%blur the input image in vertical direction
B_Hor = imfilter(I,Hh);%blur the input image in horizontal direction
我需要将上面的Matlab代码转换成OpenCV, 我尝试使用 Filter2D 但没有得到想要的结果。 openCV代码如下图
Mat oMatTempImage = imread("C:\\Users\\20055316\\Desktop\\blurMetric\\Illumination_Changes\\z_0001.bmp");
cvtColor(oMatTempImage, oMatTempImage, CV_BGR2RGB);
oMatTempImage.convertTo(oMatTempImage, CV_32FC3);
Mat oMatVerticalKernel = Mat(1, 9, CV_32FC1);
for (int nColItr = 0; nColItr < 9; nColItr++)
{
oMatVerticalKernel.at<float>(0, nColItr) = 1.0f / 9.0f;
}
Mat oMatHorizontalKernel;
transpose(oMatVerticalKernel, oMatHorizontalKernel);
Mat oMatVeriticalBlurr;
filter2D(oMatTempImage, oMatVeriticalBlurr, -1, oMatVerticalKernel);
Mat oMatHorizontalBlurr;
filter2D(oMatTempImage, oMatHorizontalBlurr, -1, oMatHorizontalKernel);
我没有得到类似的结果,请帮助我。
编辑: 谢谢大家的回复, 我知道出了什么问题。 当调用 imfilter() 函数时,Matlab 在内部执行零填充,而 opencv 不这样做。我必须在应用滤镜之前进行零填充,然后再删除零填充像素。这解决了问题。
最佳答案
我想您可以使用 Blur 或 GaussianBlur 函数。这里有一些例子:http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html
关于c++ - Matlab 到 Opencv 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096110/