如何用OpenCV实现Sobel边缘检测算法?

2026-04-12 07:251阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计880个文字,预计阅读时间需要4分钟。

如何用OpenCV实现Sobel边缘检测算法?

目录

一、Sobel算术

1.算法概述

2.主要函数

二、C++代码

三、Python代码

四、结果展示

五、相关链接

一、Sobel算术

1.算法概述

Sobel算术是一种边缘检测算法,用于检测图像中的边缘。它结合了Prewitt算术和Savitzky-Golay平滑滤波器,以增强边缘的检测效果。

2.主要函数

- Sobel边缘检测算法- 边缘检测结果的展示

二、C++代码cpp// C++代码示例

三、Python代码pythonPython代码示例

四、结果展示展示使用Sobel算术检测到的图像边缘。

五、相关链接- Sobel算术的详细介绍- 边缘检测算法比较- Sobel算术在图像处理中的应用

目录
  • 一、Sobel算法
    • 1、算法概述
    • 2、主要函数
  • 二、C++代码
    • 三、python代码
      • 四、结果展示
        • 五、相关链接

          一、Sobel算法

          1、算法概述

          Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是在对效率要求较高,而对细纹理不太关系的时候。

          使用Sobel算子提取图像边缘分3个步骤:

          提取X方向的边缘,X方向一阶Sobel边缘检测算法为:

          提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:

          综合两个方向的边缘信息得到整幅图像的边缘。

          如何用OpenCV实现Sobel边缘检测算法?

          2、主要函数

          Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)

          • src:传入的图像
          • ddepth:图像的深度
          • dxdy:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。
          • ksize:是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7。如果ksize=-1,就演变成为3x3的Scharr算子,scale是缩放导数的比例常数,默认情况为没有伸缩系数。
          • borderType:是判断图像边界的模式,这个参数默认值为cv2.BORDER_DEFAULT。
          • dstdst之后的参数都是可选参数。

          二、C++代码

          #include <iostream> #include <opencv2\opencv.hpp> using namespace cv; using namespace std; int main() { //----------------读取图像----------------- Mat img = imread("1.jpg"); //黑白图像边缘检测结果较为明显 Mat gray_img; cvtColor(img, gray_img, COLOR_BGR2GRAY); Mat resultX, resultY, resultXY; //-------------Sobel边缘检测-------------- //X方向一阶边缘 Sobel(img, resultX, CV_16S, 2, 0, 1); convertScaleAbs(resultX, resultX); //Y方向一阶边缘 Sobel(img, resultY, CV_16S, 0, 1, 3); convertScaleAbs(resultY, resultY); //整幅图像的一阶边缘 resultXY = resultX + resultY; //显示图像 imshow("resultX", resultX); imshow("resultY", resultY); imshow("resultXY", resultXY); waitKey(0); return 0; }

          三、python代码

          import cv2 img = cv2.imread("1.jpg") gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # -------------------Sobel边缘检测------------------------ x = cv2.Sobel(gray_img, cv2.CV_16S, 1, 0) y = cv2.Sobel(gray_img, cv2.CV_16S, 0, 1) # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像 Scale_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放 Scale_absY = cv2.convertScaleAbs(y) result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0) # ----------------------显示结果---------------------------- cv2.imshow('img', gray_img) cv2.imshow('Scale_absX', Scale_absX) cv2.imshow('Scale_absY', Scale_absY) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows()

          四、结果展示

          1、灰度图

          2、X方向一阶边缘

          2、Y方向一阶边缘

          3、整幅图像的一阶边缘

          五、相关链接

          [1] python+OpenCV图像处理(八)边缘检测

          到此这篇关于OpenCV实现Sobel边缘检测的示例的文章就介绍到这了,更多相关OpenCV Sobel边缘检测内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

          标签:示例目录

          本文共计880个文字,预计阅读时间需要4分钟。

          如何用OpenCV实现Sobel边缘检测算法?

          目录

          一、Sobel算术

          1.算法概述

          2.主要函数

          二、C++代码

          三、Python代码

          四、结果展示

          五、相关链接

          一、Sobel算术

          1.算法概述

          Sobel算术是一种边缘检测算法,用于检测图像中的边缘。它结合了Prewitt算术和Savitzky-Golay平滑滤波器,以增强边缘的检测效果。

          2.主要函数

          - Sobel边缘检测算法- 边缘检测结果的展示

          二、C++代码cpp// C++代码示例

          三、Python代码pythonPython代码示例

          四、结果展示展示使用Sobel算术检测到的图像边缘。

          五、相关链接- Sobel算术的详细介绍- 边缘检测算法比较- Sobel算术在图像处理中的应用

          目录
          • 一、Sobel算法
            • 1、算法概述
            • 2、主要函数
          • 二、C++代码
            • 三、python代码
              • 四、结果展示
                • 五、相关链接

                  一、Sobel算法

                  1、算法概述

                  Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是在对效率要求较高,而对细纹理不太关系的时候。

                  使用Sobel算子提取图像边缘分3个步骤:

                  提取X方向的边缘,X方向一阶Sobel边缘检测算法为:

                  提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:

                  综合两个方向的边缘信息得到整幅图像的边缘。

                  如何用OpenCV实现Sobel边缘检测算法?

                  2、主要函数

                  Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)

                  • src:传入的图像
                  • ddepth:图像的深度
                  • dxdy:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。
                  • ksize:是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7。如果ksize=-1,就演变成为3x3的Scharr算子,scale是缩放导数的比例常数,默认情况为没有伸缩系数。
                  • borderType:是判断图像边界的模式,这个参数默认值为cv2.BORDER_DEFAULT。
                  • dstdst之后的参数都是可选参数。

                  二、C++代码

                  #include <iostream> #include <opencv2\opencv.hpp> using namespace cv; using namespace std; int main() { //----------------读取图像----------------- Mat img = imread("1.jpg"); //黑白图像边缘检测结果较为明显 Mat gray_img; cvtColor(img, gray_img, COLOR_BGR2GRAY); Mat resultX, resultY, resultXY; //-------------Sobel边缘检测-------------- //X方向一阶边缘 Sobel(img, resultX, CV_16S, 2, 0, 1); convertScaleAbs(resultX, resultX); //Y方向一阶边缘 Sobel(img, resultY, CV_16S, 0, 1, 3); convertScaleAbs(resultY, resultY); //整幅图像的一阶边缘 resultXY = resultX + resultY; //显示图像 imshow("resultX", resultX); imshow("resultY", resultY); imshow("resultXY", resultXY); waitKey(0); return 0; }

                  三、python代码

                  import cv2 img = cv2.imread("1.jpg") gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # -------------------Sobel边缘检测------------------------ x = cv2.Sobel(gray_img, cv2.CV_16S, 1, 0) y = cv2.Sobel(gray_img, cv2.CV_16S, 0, 1) # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像 Scale_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放 Scale_absY = cv2.convertScaleAbs(y) result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0) # ----------------------显示结果---------------------------- cv2.imshow('img', gray_img) cv2.imshow('Scale_absX', Scale_absX) cv2.imshow('Scale_absY', Scale_absY) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows()

                  四、结果展示

                  1、灰度图

                  2、X方向一阶边缘

                  2、Y方向一阶边缘

                  3、整幅图像的一阶边缘

                  五、相关链接

                  [1] python+OpenCV图像处理(八)边缘检测

                  到此这篇关于OpenCV实现Sobel边缘检测的示例的文章就介绍到这了,更多相关OpenCV Sobel边缘检测内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

                  标签:示例目录