【问题标题】:converting the convolution code matlab to opencv in cpp在cpp中将卷积代码matlab转换为opencv
【发布时间】:2015-11-20 12:59:03
【问题描述】:

这是我的水平梯度结果。左边是opencv结果,另一个是matlab结果

我正在尝试做 H =[1,-1] 和 V=[1;-1] 的水平和垂直渐变

    Mat H_gradient,G_Filter1,kernel,V_gradient;

    Mat kernelH(1, 2, CV_32F);  
    kernelH.at<float>(0,0) = 1.0f;
    kernelH.at<float>(0,1) = -1.0f;


    Mat kernelV(2, 1, CV_32F);
    kernelV.at<float>(0,0) = 1.0f;
    kernelV.at<float>(1,0) = -1.0f;

    cvtColor( image, image, CV_RGB2GRAY );

    filter2D( image, H_gradient, -1 ,kernelH , Point( -1, -1 ), 0, BORDER_DEFAULT ); 
    filter2D( image, V_gradient, -1 ,kernelV , Point( -1, -1 ), 0, BORDER_DEFAULT );

但是还是和我的matlab代码结果不匹配。不知道为什么?

我的渐变 matlab 代码

image=double(image);
% horizontal and vertical gradient
H=[1 -1];
V=[1;-1];

H_Gradient=conv2(image,H,'same'); 
V_Gradient=conv2(image,V,'same');

【问题讨论】:

  • 你能告诉我们示例图像的不同之处吗?
  • 我添加左图是opencv结果@ypnos

标签: c++ opencv gradient convolution


【解决方案1】:

试试看

cvtColor( image, image, **CV_BGR2GRAY** );

而不是

cvtColor( image, image, **CV_RGB2GRAY** );

如果你使用默认的imread参数,OpenCv默认使用BGR颜色格式而不是RGB!

【讨论】:

  • 我改为 *CV_BGR2GRAY 但我的 opencv 和 matlab 结果仍然不一样
【解决方案2】:

和你在 Matlab 中做的一样,首先将你的图像转换为双倍。

image.convertTo(image, CV_32F);

现在我在 OpenCv 和 Matlab 中得到了相同的结果。

【讨论】:

  • 我将内核 H=[1 -1] 更改为 H=[-1 1],现在它可以工作了,现在不知道为什么。感谢@André 的建议
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多