一、算法步骤
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()
效果图如下: