永发信息网

opencv用sobel算子进行处理后的图像,怎么提取梯度信息。

答案:3  悬赏:50  手机版
解决时间 2021-02-28 15:57
  • 提问者网友:沦陷
  • 2021-02-27 17:46
opencv用sobel算子进行处理后的图像,怎么提取梯度信息。
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-02-27 18:34
给你一段代码
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);
}
全部回答
  • 1楼网友:woshuo
  • 2021-02-27 19:46
边缘提取追问要怎么提取,一般用什么方法进行提取?不好意思,刚学opencv
  • 2楼网友:拾荒鲤
  • 2021-02-27 19:04
sobel算子可以求得图像的梯度啊,要注意的是梯度是一个矢量,要分别求得图像的水平和垂直一阶导数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯