这是我的水平梯度results.The左一个是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');
发布于 2014-07-06 12:55:16
试着去做
cvtColor( image, image, **CV_BGR2GRAY** );
而不是
cvtColor( image, image, **CV_RGB2GRAY** );
如果您使用的是默认的imread参数,OpenCv将使用BGR颜色格式而不是RGB作为默认值!
发布于 2014-07-06 16:22:12
和你在Matlab中做的一样,首先把你的图像转换成双倍。
image.convertTo(image, CV_32F);
现在,我在OpenCv和Matlab中得到了同样的结果。
https://stackoverflow.com/questions/24581209
复制相似问题