《OpenCV入门第三篇》Canny边缘检测

    技术2022-07-10  123

    文章目录

    函数介绍高斯模糊GaussianBlur函数颜色空间转换cvtColor函数边缘提取Canny函数图像基本与运算bitwise_and函数 示例代码运行结果 上一篇 《OpenCV入门第二篇》缩放图像介绍了如何对图像大小进行缩放。这篇讲解如何对图像边缘进行检测提取,图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。

    函数介绍

    高斯模糊GaussianBlur函数

    GaussianBlur( src, 输入图像 ksize, 高斯内核大小(正奇数) sigmaX, 在X方向上的标准差 dst, 目标图像 sigmaY, 在Y方向上的标准差 borderType 边界类型参数 )

    颜色空间转换cvtColor函数

    cvtColor( src, 原图像 code, 转换代码标识 dst, 输出图像 dstCn 目标图像的通道数 )

    边缘提取Canny函数

    Canny( image, 输入原图 threshod1, 检测边缘的低阈值 threshod2, 检测边缘的高阈值 edges, 表示输出边缘图像 apertureSize, Sobel算子的大小 L2gradient 使用范数参数true为L2范数,false为L1范数 )

    图像基本与运算bitwise_and函数

    cv2.bitwise_and( src1, 图像1 src2, 图像2 dst, 目标图像 mask 掩膜(用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程) )

    示例代码

    import cv2 #canny边缘提取函数 def get_edge(image): #高斯模糊函数:GaussianBlur(src,ksize,sigmaX,dst,sigmaY,borderType)src为输入图像, #dst为目标图像,ksize表示高斯内核大小(正奇数),sigmaX和sigmaY分别表示在X、Y方向上的标准差。 image_blur = cv2.GaussianBlur(image, (3, 3), 0) #颜色空间转换函数:cvtColor(src,code,dst,dstCn)src为原图像,code为转换代码标识, #dst为输出图像,dstCn是目标图像的通道数。 image_gray = cv2.cvtColor(image_blur, cv2.COLOR_RGB2GRAY) #Canny边缘提取:Canny(image,threshod1,threshod2,edges,apertureSize,L2gradient) #image为输入原图,threshod1、threshod2分别是检测边缘的低、高阈值,apertureSize是Sobel算子 #的大小,L2gradient使用范数参数,true为L2范数,false为L1范数。 image_edge = cv2.Canny(image_gray, 50, 150) cv2.imshow("Canny Edge", image_edge) #图像基本运算:bitwise_and是二进制与运算,bitwise_or是二进制或运算等等。 cv2.bit color_edge = cv2.bitwise_and(image, image, mask= image_edge) cv2.imshow("Color Edge", color_edge) #读取一张图片并对其进行canny边缘提取 image = cv2.imread("E:\MyQQFile\Photos\\baby4_half.jpg") #展示图片 cv2.namedWindow("Input_Image",cv2.WINDOW_AUTOSIZE) cv2.imshow("Input_Image",image) get_edge(image) cv2.waitKey(0) cv2.destroyAllWindows()

    运行结果

    Processed: 0.009, SQL: 9