C++ 卷积码matlab到cpp中opencv的转换
这是我的水平梯度结果。左边一个是opencv结果,另一个是matlab结果 我试着做水平梯度和垂直梯度,H=[1,-1]和V=[1;-1]C++ 卷积码matlab到cpp中opencv的转换,c++,opencv,gradient,convolution,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 kern
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 );
试着做
cvtColor( image, image, **CV_BGR2GRAY** );
而不是
cvtColor( image, image, **CV_RGB2GRAY** );
如果您使用默认的imread参数,OpenCv将使用BGR颜色格式而不是RGB作为默认值 执行与在Matlab中相同的操作,首先将图像转换为double
image.convertTo(image, CV_32F);
现在我在OpenCv和Matlab中得到了相同的结果。你能给我们展示一下示例图像中的差异吗?我添加了左边的图像是OpenCv结果@ypnosI改为*CV_bgr2;灰色,但我的OpenCv和Matlab结果不是sameI改为内核H=[1-1]改为H=[-1 1],现在可以工作了。谢谢你的建议@André
image.convertTo(image, CV_32F);