如何从Opencv中的图像矩阵中提取数值梯度矩阵

How to extract Numerical gradient matrix from the image matrix in Opencv

本文关键字:提取 取数值 图像 Opencv      更新时间:2023-10-16

我正在寻找一种从矩阵中获得数值梯度的方法。还是一样函数在matlab的默认文档中实现。http://www.mathworks.com/help/techdoc/ref/gradient.html但我在露天电视台找不到。

我想使用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);

你可以在这里找到梯度计算。就像你说的计算sobel梯度一样,这个例子就是这样做的。