Matlab to Opencv Code

Matlab to Opencv Code

本文关键字:Code Opencv to Matlab      更新时间:2023-10-16
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