Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm
OpenCV提供了函数cv2.Canny()来实现Canny边缘检测,其语法形式如下:
edges = cv.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])
式中:
● edges为计算得到的边缘图像。
● image为8位输入图像。
● threshold1表示处理过程中的第一个阈值。
● threshold2表示处理过程中的第二个阈值。
● apertureSize表示Sobel算子的孔径大小。
● L2gradient为计算图像梯度幅度(gradient magnitude)的标识。其默认值为False。如果为True,则使用更精确的L2范数进行计算(即两个方向的导数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)。
eg1:使用函数cv2.Canny()获取图像的边缘,并尝试使用不同大小的threshold1和threshold2,观察获取到的边缘有何不同。
程序如下:
import cv2
o=cv2.imread("lena.bmp",cv2.IMREAD_GRAYSCALE)
r1=cv2.Canny(o,128,200)
r2=cv2.Canny(o,32,128)
cv2.imshow("original",o)
cv2.imshow("result1",r1)
cv2.imshow("result2",r2)
cv2.waitKey()
cv2.destroyAllWindows()
运行程序,结果如下图所示。其中:
● ( a )图是原始图像。
● ( b )图是参数threshold1为128、threshold2为200时的边缘检测结果。
● ( c )图是参数threshold1为32、threshold2为128时的边缘检测结果。
从程序运行结果可知,当函数cv2.Canny()的参数threshold1和threshold2的值较小时,能够捕获更多的边缘信息。