canny算法介绍(老师ppt里的):
1.高斯模糊(GaussianBlur)
2.灰度转换(cvtColor)
3.计算梯度(Sobel/Scharr)
4.非最大信号抑制
5.高低阈值输出二值图像
# coding=UTF-8
import cv2 as cv
import numpy as np
def edge_demo(image):
blurred = cv.GaussianBlur(image,(3,3),0)
gray = cv.cvtColor(blurred,cv.COLOR_BGR2GRAY)
grad_x = cv.Sobel(gray,cv.CV_16SC1,1,0)
grad_y = cv.Sobel(gray,cv.CV_16SC1,0,1)
#edge_output = cv.Canny(image,50,150)
# canny的高低阈值比例一般为1:2或1:3
edge_output = cv.Canny(grad_x,grad_y,50,150)
cv.imshow("canny edge",edge_output)
dst = cv.bitwise_and(image,image,mask = edge_output)
cv.imshow("color edge",dst)
scr = cv.imread("D:/academic/picture/opencv_data/lena.jpg")
cv.imshow("input image",scr)
edge_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()
用梯度和原图像都行!
用梯度的效果:
用原图的效果: