我正在寻找一种从矩阵中获取数值梯度的方法。相同 函数在 matlab 的默认文档中实现。 http://www.mathworks.com/help/techdoc/ref/gradient.html但我在 opencv 中找不到任何内容。
我想使用 opencv 将其移植到 C++。
我应该将 sobel 用于水平和垂直渐变还是任何 其他功能或方法???
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;
/// Gradient X
Sobel( mat, grad_x, CV_32F, 1, 0, 3);
imshow("xx",grad_x);
convertScaleAbs( grad_x, abs_grad_x );
/// Gradient Y
Sobel( mat, grad_y, CV_32F, 0, 1, 3);
convertScaleAbs( grad_y, abs_grad_y );
/// Total Gradient (approximate)
Mat res;
addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, res );
[编辑] 解决方案
Mat grad_x,abs_grad_x,grad_y,abs_grad_y;
int type=CV_64F ;
Gradient.setTo(Scalar::all(0));
/// Gradient Y
Sobel( input, grad_x, type, 1, 0, 3);
convertScaleAbs(grad_x,abs_grad_x);
cv::accumulateSquare(abs_grad_x,Gradient);
/// Gradient Y
Sobel(input, grad_y, type, 0, 1, 3);
convertScaleAbs(grad_y,abs_grad_y);
cv::accumulateSquare(abs_grad_y,Gradient);
imshow("gradient Mag",Gradient);
最佳答案
可以找到梯度计算here就像您所说的计算 sobel 梯度一样,该示例就是这样做的。
关于c++ - 如何从Opencv中的图像矩阵中提取数值梯度矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964340/