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 代码的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV的图像直角坐标系转极坐标系的函数warpPolar()详解,并附自己写的实现直角坐标系转极坐标系的MATLAB代码