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