将卷积码matlab转换为cpp中的opencv

时间:2014-07-04 22:12:37

标签: c++ opencv gradient convolution

这是我的水平渐变结果。左边是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');

2 个答案:

答案 0 :(得分:0)

尝试做

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

而不是

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

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

答案 1 :(得分:0)

与您在Matlab中所做的相同,首先将图像转换为双倍。

image.convertTo(image, CV_32F);

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