opencv 边缘检测 cv2.Canny()详解

个人简介: 深度学习图像领域工作者
总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用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:可选参数,用于指定是否使用 L 2 L_2 L2梯度计算方式。默认值为False,表示使用 L 1 L_1 L1梯度计算方式。

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()函数进行边缘检测时,阈值的选择对最终的结果有很大的影响。一般来说,较低的阈值可以检测到较弱的边缘,而较高的阈值可以去除较弱的边缘。建议在使用该函数时,先使用默认的阈值进行测试,然后根据实际情况进行调整。

你可能感兴趣的:(opencv,计算机视觉,python)