Matlab 转 Opencv 代码

Posted

技术标签:

【中文标题】Matlab 转 Opencv 代码【英文标题】:Matlab to Opencv Code 【发布时间】:2014-09-29 09:01:59 【问题描述】:
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 不这样做。在应用过滤器之前我必须归零并稍后删除零填充像素。这样就解决了问题。

【问题讨论】:

结果如何?我假设您一开始就知道您对转化做了什么 @MarcoA.yes 我正在尝试将图像从 uchar 转换为浮点类型,我只想知道 filter2D 是将 Matlab imfilter 转换为 opencv 的正确方法,如果不是,我该如何进行? @Barry 是的,这些是等价的(尽管有更简单的方法来编写 OpenCV 代码)。请发布显示不同结果的图像。 一个明显的区别是您的 matlab 代码在双精度上运行,而您的 openCV 代码在单精度(浮点数)上运行。结果有何不同? 你试过sepfilter2D吗? 【参考方案1】:

我猜你可以使用 Blur 或 GaussianBlur 函数。这里有一些例子:http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html

【讨论】:

以上是关于Matlab 转 Opencv 代码的主要内容,如果未能解决你的问题,请参考以下文章

[转] Matlab与C++混合编程,添加OpenCV库

[转] matlab调用opencv函数的配置

OpenCV的图像直角坐标系转极坐标系的函数warpPolar()详解,并附自己写的实现直角坐标系转极坐标系的MATLAB代码

OpenCV/Matlab生成倒放视频(2022.1.5)

OpenCV/Matlab生成倒放视频(2022.1.5)

DLL发布 matlab代码发布