一、算法步驟
1,對圖像進行GaussianBlur(高斯模糊)消除一些噪聲
2,對圖像進行灰度轉換cvtColor
3,計算梯度Sobel/Scharr
4,非最大信號抑制
5,高低閾值輸出二值圖像
設定兩個閾值T1和T2,凡是高于T2的都保留,凡是低于T1的都舍棄。
從高于T2的像素出發,凡是大于T1并且相互連接的都保留。
最終得到一個輸出二值圖像。
推薦高低閾值比為T2:T1=3:1或者2:1,其中T2為高閾值,T1為低閾值。
二、Canny邊緣檢測算法
cv2.Canny(xgrad,ygrad,50,150)
x方向梯度、y方向梯度、低閾值、高閾值
import cv2
import numpy as np
from matplotlib import pyplot as pltdef edge(image):blurred = cv2.GaussianBlur(image,(3,3),0)gray = cv2.cvtColor(blurred,cv2.COLOR_BGR2GRAY)#x Gradientxgrad = cv2.Sobel(gray,cv2.CV_16SC1,1,0)#y Gradientygrad = cv2.Sobel(gray,cv2.CV_16SC1,0,1)#Cannyedge_output = cv2.Canny(xgrad,ygrad,50,150)#edge_output = cv2.Canny(gray,50,150)cv2.imshow("Canny Edge",edge_output)dst = cv2.bitwise_and(image,image,mask=edge_output)cv2.imshow("Color Edge",dst)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
edge(src)cv2.waitKey(0)
cv2.destroyAllWindows()
效果圖如下: