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

标签 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);

最佳答案

可以找到梯度计算here就像您所说的计算 sobel 梯度一样,该示例就是这样做的。

关于c++ - 如何从Opencv中的图像矩阵中提取数值梯度矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964340/

相关文章:

extract - 反编译/提取微软代理?

c++ - 在 C# 中反序列化在 C++ 中序列化的字节数组

c++ - CURL SSH key 密码安全

c++ - 独立于平台的资源系统(如 Qt 资源系统)

c++ - cvSVM 训练对 HOGDescriptor 的结果很差

java - 压缩后应用程序无法运行

c++ - dynamic_cast 的性能?

opencv - OpenCV:如何使用AffineTransformer

python - 实时结合 cv2.imshow() 和 matplotlib plt.show()

mysql - Shell脚本从文件中提取数据