图像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]])
但是两种方式都需要用户指定高低阈值来进行选择,用于应对不同的图像边缘。
运行结果: