opencv用sobel算子进行处理后的图像,怎么提取梯度信息?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv用sobel算子进行处理后的图像,怎么提取梯度信息?相关的知识,希望对你有一定的参考价值。
给你一段代码\x0d\x0avoidGradient(Mat&InputArray,Mat&OutputArray)\x0d\x0a\x0d\x0a//转换为灰度图像\x0d\x0aMatInputArray_gray(height,width,CV_32F);\x0d\x0acvtColor(InputArray,InputArray_gray,CV_RGB2GRAY);\x0d\x0a//创建X、Y方向梯度图像变量\x0d\x0aMatgrad_x,grad_y;\x0d\x0aMatabs_grad_x,abs_grad_y;//梯度绝对值\x0d\x0a//X方向梯度并取绝对值\x0d\x0aSobel(InputArray_gray,grad_x,InputArray_gray.depth(),1,0);\x0d\x0aconvertScaleAbs(grad_x,abs_grad_x);\x0d\x0a//Y方向梯度并取绝对值\x0d\x0aSobel(InputArray_gray,grad_y,InputArray_gray.depth(),0,1);\x0d\x0aconvertScaleAbs(grad_y,abs_grad_y);\x0d\x0a//计算梯度值的平方\x0d\x0apow(abs_grad_x,2.0f,abs_grad_x);\x0d\x0apow(abs_grad_y,2.0f,abs_grad_y);\x0d\x0a//OutputArray=abs_grad_x+abs_grad_y;\x0d\x0aadd(abs_grad_x,abs_grad_y,OutputArray,noArray(),CV_32F);\x0d\x0a//显示梯度平方\x0d\x0a//imshow("Gradient",OutputArray);\x0d\x0a//waitKey(0);\x0d\x0a 参考技术A 给你一段代码void Gradient(Mat& InputArray, Mat& OutputArray)
//转换为灰度图像
Mat InputArray_gray(height, width, CV_32F);
cvtColor(InputArray, InputArray_gray, CV_RGB2GRAY);
// 创建X、Y方向梯度图像变量
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;// 梯度绝对值
// X方向梯度 并取绝对值
Sobel( InputArray_gray, grad_x, InputArray_gray.depth(), 1, 0);
convertScaleAbs( grad_x, abs_grad_x );
// Y方向梯度 并取绝对值
Sobel( InputArray_gray, grad_y, InputArray_gray.depth(), 0, 1);
convertScaleAbs( grad_y, abs_grad_y );
//计算梯度值的平方
pow(abs_grad_x, 2.0f, abs_grad_x);
pow(abs_grad_y, 2.0f, abs_grad_y);
//OutputArray = abs_grad_x + abs_grad_y;
add(abs_grad_x, abs_grad_y, OutputArray, noArray(), CV_32F);
//显示梯度平方
//imshow("Gradient", OutputArray);
//waitKey(0);
如何用opencv2.0.0进行图像处理
参考技术A boxFilter() 就是滑动窗口平均滤波的二维版。GaussianBlur() 高斯平均,也就是高斯模糊。
medianBlur() 中值滤波,个人最爱的滤波函数。
bilateralFilter() 双线性滤波。
前面这四个函数是原来OpenCV里的cvSmooth()取不同参数的应用。
Sobel() 使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分。
Scharr() 计算一阶导,x方向或y方向,以前这个方法是放在cvSobel里的。
Laplacian() 拉普拉斯变换。
erode(), dilate() 腐蚀、膨胀。
以上是关于opencv用sobel算子进行处理后的图像,怎么提取梯度信息?的主要内容,如果未能解决你的问题,请参考以下文章