[OpenCV官方教程中文版-段力辉译]-Canny边缘检测

2021-07-15  本文已影响0人  六千宛

Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,即由多个步骤构成。

原型

OpenCV-Python中Canny函数的原型为:

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

必要参数:

使用

Canny函数的使用很简单,只需指定最大和最小阈值即可。如下:

#coding=utf-8
import cv2
import numpy as np  
img = cv2.imread("D:/lion.jpg", 0)  # 由于Canny只能处理灰度图,所以将读取的图像转成灰度图
img = cv2.GaussianBlur(img,(3,3),0) # 用高斯平滑处理原图像降噪。若效果不好可调节高斯核大小
canny = cv2.Canny(img, 50, 150)     # 调用Canny函数,指定最大和最小阈值,其中apertureSize默认为3。
cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

处理结果如下:
分别为高斯核为(1,1)和(3, 3)的效果图:


image.png
image.png

更多
这个程序只是静态的,下面是可以在运行时调整阈值大小的程序。其代码如下:

import cv2
import numpy as np
def CannyThreshold(lowThreshold):
    detected_edges = cv2.GaussianBlur(gray,(3,3),0)
    detected_edges =cv2.Canny(detected_edges,lowThreshold,lowThreshold*ratio,apertureSize = kernel_size)
    dst = cv2.bitwise_and(img,img,mask = detected_edges)  # just add some colours to edges from original image.
    cv2.imshow('canny demo',dst)
lowThreshold = 0
max_lowThreshold = 100
ratio = 3
kernel_size = 3
img = cv2.imread('D:/lion.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.namedWindow('canny demo')
cv2.createTrackbar('Min threshold','canny demo',lowThreshold, max_lowThreshold, CannyThreshold)
CannyThreshold(0)  # initialization
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

效果图如下:


image.png
上一篇 下一篇

猜你喜欢

热点阅读