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

时间:2012-04-01 12:22:34

标签: c++ opencv extract gradient numerical

我正在寻找一种从矩阵中获得数值梯度的方法。相同 函数在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);

1 个答案:

答案 0 :(得分:1)

你可以找到渐变计算here就像你说的计算索贝尔渐变一样,这个例子也是如此。