python:opencv-边缘检测canny

Canny边缘检测步骤

  1. 去噪。边缘检测容易受到噪声的影响,第一步是用5*5的高斯滤波去除噪声

    1
    blur = cv2.GaussianBlur(img,(5,5),0)
  2. 计算梯度。梯度的方向与边缘的方向总是垂直的

  3. 非极大值抑制。去除那些非边界上的点。对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的。如果是则保留,否则抑制

  4. 应用双阈值确定边缘。我们需要设置两个阈值:minVal 和 maxVal。当图像的灰度梯度高于 maxVal 时被认为是真的边界,那些低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃。

opencv中的边缘检测

只需要cv2.Canny()即可完成

代码:

1
2
3
4
5
6
7
8
9
10
11
12
#边缘检测
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\Administrator\\Pictures\\wd.jpg')

#边缘检测函数
edges = cv2.Canny(img,150,250)

cv2.imshow('venti',img)
cv2.imshow('venti_edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Canny函数的参数详解

  1. image:8位输入图像
  2. threshold1:第一个输入的阈值minVal
  3. threshold2:第二个输入的阈值maxVal
  4. apertureSize :Sobel 算子的孔径大小。
  5. L2gradient :为计算图像梯度幅度(gradient magnitude)的标识。其默认值为 False。

当函数 cv2.Canny()的参数 threshold1 和 threshold2 的值较小时,能够捕获更多的边缘信息。

运行结果: