image = imread('canny.jpg')
show(image)
def edge_detection(image,minVal=100,maxVal=200):
image = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)#灰度化处理
edges = cv2.Canny(image,minVal,maxVal)
plt.imshow(edges,'gray')
plt.axis('off')
plt.show()
edge_detection(image)
#可以看到用canny得到的图像边缘非常清晰
image = imread('chepai.jpeg')
show(image)
edge_detection(image)
#canny边缘检测中,minVal,maxVal对检测结果有着很大的影响
image = imread('yingbi.jpg')
show(image)
image = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)#灰度化处理
image = cv2.GaussianBlur(image,(3,3),0)#做一下滤波。最后结果会好一点
Value = [(10,150),(100,200),(180,230)]#设置不同的minVal,maxVal值
plt.figure(figsize=(20,5))
for i,(minVal,maxVal) in enumerate(Value):
plt.subplot(1,3,i+1)
edges = cv2.Canny(image,minVal,maxVal)
edges = cv2.GaussianBlur(image,(3,3),0)#做一下滤波。最后结果会好一点
plt.imshow(edges,'gray')
plt.title(str((minVal,maxVal)))
plt.axis('off')
plt.show()
#自动确定阈值的方法
def auto_canny(image,sigma=0.33):
v = np.median(image)
#根据图片的中间值来确定阈值的最大值和最小值
lower = int(max(0,(1.0-sigma) * v))
upper = int(min(255,(1.0+sigma) * v))
edged = cv2.Canny(image,lower,upper)
print(lower,upper)
return edged
edges = auto_canny(image)
edges = cv2.GaussianBlur(edges,(3,3),0)
plt.imshow(edges,'gray')
plt.axis('off')
plt.show()