参考:https://blog.csdn.net/gangzhucoll/article/details/78824590
(1)高斯模糊
(2)灰度转换
(3)计算梯度
(4)非最大信号抑制
(5)高低阈值输出二值图像
import cv2 as cv
import numpy as np
def edge(img):
#高斯模糊,降低噪声
blurred = cv.GaussianBlur(img,(3,3),0)
#灰度图像
gray=cv.cvtColor(blurred,cv.COLOR_RGB2GRAY)
#图像梯度
xgrad=cv.Sobel(gray,cv.CV_16SC1,1,0)
ygrad=cv.Sobel(gray,cv.CV_16SC1,0,1)
#计算边缘
#50和150参数必须符合1:3或者1:2
edge_output=cv.Canny(xgrad,ygrad,50,150)
#图一
cv.imshow("edge",edge_output)
dst=cv.bitwise_and(img,img,mask=edge_output)
#图二(彩色)
cv.imshow('cedge',dst)
src=cv.imread('15.jpg')
#图三(原图)
cv.imshow('def',src)
edge(src)
#等待用户操作
cv.waitKey(0)
#释放所有窗口
cv.destroyAllWindows()
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img=cv.imread("C:/Users/Administrator/Desktop/dog.jpg",0)
edges=cv.Canny(img,100,300)#最小阈值,最大阈值,比值一般为1:2或1:3
cv.imwrite("C:/Users/Administrator/Desktop/dog-canny.jpg",edges)
plt.subplot(121)
plt.imshow(img,plt.cm.gray)
plt.title("origin image")
plt.xticks([])
plt.yticks([])
plt.subplot(122)
plt.imshow(edges,cmap="gray")
plt.title("edge image")
plt.xticks([])
plt.yticks([])
plt.show()
直接调用代码如下图所示
原图和canny检测出来的图