【Opencv3+Python3入门(14)图像Canny边缘检测】

版权声明:本文为博主原创文章,转载时须注明出处 https://blog.csdn.net/KID_yuan/article/details/89553506

图像Canny边缘检测算法为一种非常有效的图像边缘检测的算法。

基本步骤参考:https://blog.csdn.net/KID_yuan/article/details/88566444

#14,canny边缘检测
import cv2 as cv
import numpy as np

#边缘检测算法
def edge_image(image):
    blurred = cv.GaussianBlur(image,(5, 5), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
    #利用Sobel计算X和Y方向梯度
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    #高低阈值大小比值一般推荐取值为,T2:T1=3:2或T2:T1=2:1
    #T2为高阈值,T1为低阈值
    #将Sobel梯度带入。
    #设置阈值。
    edge_output = cv.Canny(xgrad, ygrad, 50, 150)
    cv.namedWindow("GrayCanny",0)
    cv.imshow("GrayCanny", edge_output)
    #彩色边缘即对原图像进行与操作。
    dst = cv.bitwise_and(image, image, mask=edge_output)
    cv.namedWindow("ColorCanny",0)
    cv.imshow("ColorCanny", dst)
src = cv.imread("F:\OutputResult\SrcImage\saber18.jpg")
cv.namedWindow("src",0)
cv.imshow("src", src)
edge_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

函数说明:

在Opencv中给出了两种调用Canny边缘检测的方法:

第一种方式用户不用输入x和y方向的梯度,有程序内部自带计算;

cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

第二种用户可以输入自己的梯度计算方式计算的x和y方向的梯度带入。

cv.Canny(dx, dy, threshold1, threshold2[, edges[, L2gradient]])

但是两种方式都需要用户指定高低阈值来进行选择,用于应对不同的图像边缘。

运行结果:

猜你喜欢

转载自blog.csdn.net/KID_yuan/article/details/89553506