随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

OpenCV使用Sobel和Scharr函数进行梯度计算

一、概述

  案例:使用Sobel和Scharr函数计算梯度图像

  相关函数介绍:  

复制代码
Sobel (
InputArray Src // 输入图像
OutputArray dst// 输出图像,大小与输入图像一致
int depth // 输出图像深度. 
Int dx.  // X方向,几阶导数
int dy // Y方向,几阶导数. 
int ksize, SOBEL算子kernel大小,必须是1、357double scale  = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
ps:
  1.后三个参数可以不传,直接默认效果就不错
  2.次函数可以分别计算x方向和y方向的梯度
复制代码
复制代码
Scharr (
InputArray Src // 输入图像
OutputArray dst// 输出图像,大小与输入图像一致
int depth // 输出图像深度. 
Int dx.  // X方向,几阶导数
int dy // Y方向,几阶导数. 
double scale  = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
ps:
  1.后三个参数可不传直接使用默认
  2.次函数也可以计算x方向的梯度和y方向闪的梯度
复制代码

 

  执行步骤:

  1.使用高斯模糊去除噪声

  2.使用cvtColor转灰度图像

  3.使用sobel或者scharr计算x方向和y方向的梯度

  4.使用convertScaleAbs去图像像素绝对值

  5.使用addWeighted对x方向和y方向的梯度进行权重相加得到一个完整的梯度

  6.输出完整的梯度图像

二、代码示例

复制代码
Mat src = imread(filePath);
    if(src.empty()){
        return;
    }
    imshow("src",src);//输出原图
    Mat sobel_X,sobel_y,scharr_x,scharr_y,sobel_result,scharr_result,dst;
    //高斯模糊去噪声
    GaussianBlur(src,dst,Size(5,5),0);
    //转灰度值
    cvtColor(dst,dst,COLOR_BGR2GRAY);
    //x方向及y方向做地图计算
    Sobel(dst,sobel_X,CV_16S,1,0,3);//此处卷积核大小为1的效果也比较好,如果5以上效果会非常差(仅限我用的那张图片,实际情况需要根据原始图像的线条来)
    Sobel(dst,sobel_y,CV_16S,0,1,3);
    //计算图像像素绝对值并输出
    convertScaleAbs(sobel_X,sobel_X);
    convertScaleAbs(sobel_y,sobel_y);
    //对x及y方向上的梯度图像做权重相加
    addWeighted(sobel_X,0.5,sobel_y,0.5,1,sobel_result);
    imshow("sobel_result",sobel_result);

    //使用Scharr函数计算x方向及y方向的梯度图像
    Scharr(dst,scharr_x,CV_16S,1,0);
    Scharr(dst,scharr_y,CV_16S,0,1);
    //计算绝对值并输出
    convertScaleAbs(scharr_x,scharr_x);
    convertScaleAbs(scharr_y,scharr_y);
    //x方向和y方向进行权重相加
    addWeighted(scharr_x,0.5,scharr_y,0.5,1,scharr_result);
    imshow("scharr_result",scharr_result);
复制代码

 

posted on   飘杨......  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2020-02-17 RxJava2绑定流程分析之——观察者和被观察者是如何实现绑定的
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示