Python3与OpenCV3.3 图像处理---边缘检测算子(canny)

参考:https://blog.csdn.net/gangzhucoll/article/details/78824590

1 canny 算法五步骤

(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()

2 直接调用cv.canny()代码

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()

直接调用代码如下图所示

Python3与OpenCV3.3 图像处理---边缘检测算子(canny)_第1张图片

原图和canny检测出来的图


Python3与OpenCV3.3 图像处理---边缘检测算子(canny)_第2张图片Python3与OpenCV3.3 图像处理---边缘检测算子(canny)_第3张图片

你可能感兴趣的:(python,图像处理)