第5章 边缘和轮廓
5.1边缘检测
图像的边缘是指图像中灰度值发生急剧变化的位置,边缘检测的目的是为了绘制出边缘线条。边缘通常是不连续的,不能表示整体。图像轮廓是指将边缘连接起来形成的整体。
5.1.1 Laplacian边缘检测
Laplacian边缘检测使用图像矩阵与拉普拉斯核进行卷积运算, 其本质是计算图像中任意一点与其在水平方向和垂直方向上4个相邻点平均值的差值。
cv2.Laplacian()函数用于实现Laplacian边缘检测,基本格式如下。
dst=cv2.Laplacian(src,depth[,kszie[,scale[,delta[,borderType]]]])
参数说明如下。
dst表示边缘检测后结果图像
src为原图像
ddepth为目标图像的深度
ksize为用于计算二阶导数滤波器的系数,必须为正数且是奇数
scale为可选比例因子
delta可添加到边缘检测结果中的可选增量值
borderType为边界值类型
import cv2
img=cv2.imread('D:\zhangjing\photo\hua.png',cv2.IMREAD_REDUCED_COLOR_2)
cv2.imshow('original',img)
'''
Laplacian边缘检测
dst=cv2.Laplacian(src,depth[,kszie[,scale[,delta[,borderType]]]])
dst表示边缘检测后结果图像
src为原图像
ddepth为目标图像的深度
ksize为用于计算二阶导数滤波器的系数,必须为正数且是奇数
scale为可选比例因子
delta可添加到边缘检测结果中的可选增量值
borderType为边界值类型
'''
img2=cv2.Laplacian(img,cv2.CV_8U)#拉普拉斯边缘检测
cv2.imshow('Laplacian',img2)
cv2.waitKey(0)
![]() |
![]() |
5.1.2 Sobel边缘检测
Sobel边缘检测将高斯滤波和微分结合起来进行图像卷积运算,结果具有一定的抗噪性。
dst=cv2.sobel(src,depth,dx,dy[,kszie[,scale[,delta[,borderType]]]])
dx为导数x的阶数
dy为导数y的阶数
ksize为扩展的Sobel内核的大小,必须是1、3、5、7
import cv2
img=cv2.imread('D:\zhangjing\photo\hua.png',cv2.IMREAD_REDUCED_COLOR_2)
cv2.imshow('original',img)
'''
Laplacian边缘检测
dst=cv2.Laplacian(src,depth[,kszie[,scale[,delta[,borderType]]]])
dst表示边缘检测后结果图像
src为原图像
ddepth为目标图像的深度
ksize为用于计算二阶导数滤波器的系数,必须为正数且是奇数
scale为可选比例因子
delta可添加到边缘检测结果中的可选增量值
borderType为边界值类型
'''
img3=cv2.Sobel(img,cv2.CV_8U,0,1)#Sobel边缘检测
cv2.imshow('Sobel',img3)
cv2.waitKey(0)
![]() |
![]() |
5.1.3 Canny边缘检测
Canny边缘检测的算法包括下列5个步骤。
- 使用高斯滤波去除图像噪声。
- 使用Sobel核进行滤波,计算梯度。
- 在边缘使用非最大值抑制。
- 对检测出的边缘使用双阈值以去除假阳性。
- 分析边缘之间的连续性,保留真正的边缘,消除不明显的边缘。
cv2.Canny()函数用于实现Canny边缘检测,其基本格式如下。
dst=cv2.Canny(src,threshold1,threshold2[,apertureSize[,L2gradient]])
参数说明如下。
threshold1为第一阈值
threshold2为第二阈值
apertureSize为计算梯度时使用的Sobel核大小
L2gradient为标志
import cv2
img=cv2.imread('D:\zhangjing\photo\hua.png',cv2.IMREAD_REDUCED_COLOR_2)
cv2.imshow('original',img)
'''
Laplacian边缘检测
dst=cv2.Laplacian(src,depth[,kszie[,scale[,delta[,borderType]]]])
dst表示边缘检测后结果图像
src为原图像
ddepth为目标图像的深度
ksize为用于计算二阶导数滤波器的系数,必须为正数且是奇数
scale为可选比例因子
delta可添加到边缘检测结果中的可选增量值
borderType为边界值类型
'''
img4=cv2.Canny(img,200,300)#Canny边缘检测
cv2.imshow('Canny',img4)
cv2.waitKey(0)
|