OpenCV提供了一給非常方便的Canny函數(算法發明者:Jhon F.Canny)。
Canny邊緣檢測算法非常複雜,其實現有5個步驟:
- 使用高斯濾波器對圖像進行降噪
- 計算梯度
- 在邊緣上使用非最大抑制(NMS)
- 在檢測到的邊緣上使用雙閾值去除假陽性
- 分析所有邊緣及其之間的連接,保留真正的邊緣,消除不明顯的邊緣
import cv2
#轉爲灰度圖片
img = cv2.imread(r"F:\Python\picture\lena.jpg",cv2.IMREAD_GRAYSCALE)
#降噪
img = cv2.GaussianBlur(img,(5,5),0)
#邊緣檢測,50爲低閾值,100爲高閾值,通過調整閾值可以獲得不同效果
img = cv2.Canny(img,50,100)
cv2.imshow("canny",img)
cv2.waitKey()
cv2.destroyAllWindows()
原圖:
上述代碼的效果圖:
調整閾值爲100,200後的效果:
img = cv2.Canny(img,100,200)