opencv 边缘检测 cv2.Canny()详解
创始人
2024-06-03 16:59:06

👨‍💻个人简介: 深度学习图像领域工作者
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


cv2.Canny()函数是OpenCV中用于边缘检测的函数,其主要功能是检测图像中的边缘并标记出来。

函数的调用格式如下:

edges = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

其中,参数含义如下:

  • image:要进行边缘检测的输入图像,可以是灰度图像或彩色图像。

  • threshold1:第一个阈值,用于边缘检测中的滞后阈值,建议取值为100。

  • threshold2:第二个阈值,用于边缘检测中的滞后阈值,建议取值为200。

  • edges:可选参数,用于存储边缘检测的结果。如果指定了该参数,则该参数会被用来存储检测到的边缘图像。如果没有指定该参数,则函数会自动创建一个与输入图像相同大小的数组来存储检测到的边缘图像。

  • apertureSize:可选参数,用于指定Sobel算子的大小,建议取值为3。

  • L2gradient:可选参数,用于指定是否使用L2L_2L2​梯度计算方式。默认值为False,表示使用L1L_1L1​梯度计算方式。

cv2.Canny()函数的工作原理如下:

  1. 对输入图像进行灰度化处理。
  2. 对灰度图像进行高斯滤波,以平滑图像并去除噪声。
  3. 对滤波后的图像使用Sobel算子计算梯度幅值和方向。
  4. 对梯度幅值进行非极大值抑制,以压缩边缘带宽。
  5. 对压缩后的边缘带宽使用滞后阈值进行二值化,得到二值化图像。
  6. 对二值化图像进行连接操作,将断开的边缘进行连接,得到最终的边缘图像。

下面是一个简单的示例代码,演示了如何使用cv2.Canny()函数进行边缘检测:

import cv2
import numpy as np# 读取一张图片
img = cv2.imread('test.jpg', 0)# 使用Canny函数进行边缘检测
edges = cv2.Canny(img, 100, 200)# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Canny Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

需要注意的是,在使用cv2.Canny()函数进行边缘检测时,阈值的选择对最终的结果有很大的影响。一般来说,较低的阈值可以检测到较弱的边缘,而较高的阈值可以去除较弱的边缘。建议在使用该函数时,先使用默认的阈值进行测试,然后根据实际情况进行调整。

相关内容

热门资讯

我省在全国率先实现 省市低空飞... (来源:市场星报) 星报讯 记者从安徽省通航控股集团获悉,根据国家、省、市三级平台体系建设有关要求...
名家汇庐州 戏韵润江淮 (来源:市场星报) 星报讯 1月14日,“百戏入皖 星耀合肥”戏曲文化座谈会在合肥召开。会上发布了...
体彩责任建设 守护公益初心   近日,金华体彩携“安心购彩守护行动”走进市区电信营业厅,以“零距离、接地气”的公益宣传形式,将购...
用“绣花功夫”化解居民难题 (来源:劳动午报)转自:劳动午报 北京市公安局大兴分局孙村派出所社区民警魏征扎根社区一线7年有余,扛...
那年青春我们正好韩露最后结局和... 《那年青春我们正好》种丹妮饰演的韩露是女主角刘婷的闺蜜,但是因为两人同时喜欢上肖小军的原因,所以要跟...