1. Opencv简介
Opencv(Open Source Computer Vision Library)是一个开源计算机视觉库,主要用于实时图像处理、计算机视觉和模式识别等领域。其中,图像处理是Opencv最常用也是最基础的应用之一,边缘提取就是图像处理中常用的一种方法。
边缘提取的主要作用是将一幅图像中的目标轮廓提取出来,常用于图像分割、匹配和识别等任务。而在Opencv中,边缘提取函数主要有Canny、Laplacian、Sobel等三种。
2. Canny函数
2.1 函数功能
Canny函数是Opencv中用于边缘检测的函数,它可以检测出图像中的明显边缘,并在这些边缘上进行非极大值抑制和双阈值检测,从而得到最终的边缘图像。
函数参数:
image——输入图像
threshold1——第一个阈值
threshold2——第二个阈值
apertureSize——Sobel算子的大小
L2gradient——计算的方式,如果为True则采用更复杂的算法计算梯度幅值,否则采用简单算法计算
2.2 代码示例
import cv2
img = cv2.imread('lena.jpg',0)
edges = cv2.Canny(img,100,200)
cv2.imshow('Canny', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,第一个参数0表示以灰度图像的形式读入图像,第一个阈值100和第二个阈值200是根据实际情况进行调整的。
3. Laplacian函数
3.1 函数功能
Laplacian函数是Opencv中用于边缘检测的函数,它可以检测出图像中的所有边缘,包括弱边缘和噪声点,并在这些边缘上进行非极大值抑制,从而得到最终的边缘图像。
函数参数:
image——输入图像
ddepth——输出图像的深度,如果为-1则表示与输入图像使用相同的深度
ksize——Sobel算子的大小
3.2 代码示例
import cv2
img = cv2.imread('lena.jpg',0)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
cv2.imshow('Laplacian', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,第一个参数0表示以灰度图像的形式读入图像,第二个参数cv2.CV_64F表示输出图像的深度。
4. Sobel函数
4.1 函数功能
Sobel函数是Opencv中用于边缘检测的函数,它可以检测出图像中的所有边缘,并在这些边缘上进行非极大值抑制和双阈值检测,从而得到最终的边缘图像。
函数参数:
image——输入图像
ddepth——输出图像的深度,如果为-1则表示与输入图像使用相同的深度
dx——x方向导数的阶数
dy——y方向导数的阶数
ksize——Sobel算子的大小
4.2 代码示例
import cv2
img = cv2.imread('lena.jpg',0)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
cv2.imshow('SobelX', sobelx)
cv2.imshow('SobelY', sobely)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,第一个参数0表示以灰度图像的形式读入图像,第三个参数1表示x方向导数的阶数,第四个参数0表示y方向导数的阶数,ksize表示Sobel算子的大小。
5. 总结
在Opencv中,边缘提取函数主要有Canny、Laplacian和Sobel三种,它们各自具有不同的优缺点,可以根据实际情况进行选择。
需要注意的是,在进行边缘提取时,需要先将彩色图像转换为灰度图像,以方便进行后续处理。