Python3与OpenCV3.3 图像处理(十八)--Canny边缘提取

一、什么是边缘检测

图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。


二、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()
图一

 

posted @ 2017-12-17 15:30  ProgramerCat  阅读(128)  评论(0编辑  收藏  举报