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


上一篇《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()

运行结果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章