图像边沿检测
1 Sobel算子
1.1概念
是一种用于图像处理处罚的算法,主要用于边沿检测。它通过盘算图像亮度的空间梯度来突出显示图像中的边沿。Sobel算子包罗两个核(卷积矩阵),分别用于检测水平边沿和垂直边沿。
1.2 两个卷积矩阵
1.3 函数及参数理解
- cv2.Sobel(图片变量,数据类型,dx=1/0,dy=0/1),水平/垂直获取轮廓
- 数据类型为数字-1时,与图片类型雷同,为cv2.CV_64F时,为浮点型有正负
- dx为1时水平获取,dy为1时垂直获取,不能同时为1
- cv2.convertScaleAbs(轮廓变量),对轮廓变量内的数值绝对值化,使其可以显示出来
- cv2.addWeighted(x轮廓变量,1,y轮廓变量,1,0),组合轮廓变量使其完整
1.4 灰度图实际测试
代码展示:
- import cv2
- yuan = cv2.imread('yuan.png')
- cv2.imshow('yuan',yuan)
- cv2.waitKey(0)
- yuan_1 = cv2.Sobel(yuan,-1,dx=1,dy=0)
- yuan_64F = cv2.Sobel(yuan,cv2.CV_64F,dx=1,dy=0)
- yuan_Abs = cv2.convertScaleAbs(yuan_64F)
- yuan_1_y = cv2.Sobel(yuan,-1,dx=0,dy=1)
- yuan_64F_y = cv2.Sobel(yuan,cv2.CV_64F,dx=0,dy=1)
- yuan_Abs_y = cv2.convertScaleAbs(yuan_64F_y)
- # 组合
- yuan_xy = cv2.addWeighted(yuan_Abs,1,yuan_Abs_y,1,0)
- cv2.imshow('yuan_1',yuan_1)
- cv2.waitKey(0)
- cv2.imshow('yuan_64F',yuan_64F)
- cv2.waitKey(0)
- cv2.imshow('yuan_Abs',yuan_Abs)
- cv2.waitKey(0)
- cv2.imshow('yuan_1_y',yuan_1_y)
- cv2.waitKey(0)
- cv2.imshow('yuan_64F_y',yuan_64F_y)
- cv2.waitKey(0)
- cv2.imshow('yuan_Abs_y',yuan_Abs_y)
- cv2.waitKey(0)
- cv2.imshow('yuan_xy',yuan_xy )
- cv2.waitKey(0)
复制代码 运行结果:
1.5 BGR图测试
代码展示:
- import cv2
- at1 = cv2.imread('at1.png')
- cv2.imshow('at1',at1)
- cv2.waitKey(0)
- at1_64F = cv2.Sobel(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs = cv2.convertScaleAbs(at1_64F)
- at1_64F_y = cv2.Sobel(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y = cv2.convertScaleAbs(at1_64F_y)
- # 组合
- at1_xy = cv2.addWeighted(at1_Abs,1,at1_Abs_y,1,0)
- cv2.imshow('at1_64F',at1_64F)
- cv2.waitKey(0)
- cv2.imshow('at1_Abs',at1_Abs)
- cv2.waitKey(0)
- cv2.imshow('at1_64F_y',at1_64F_y)
- cv2.waitKey(0)
- cv2.imshow('at1_Abs_y',at1_Abs_y)
- cv2.waitKey(0)
- cv2.imshow('at1y_xy_sobel',at1_xy )
- cv2.waitKey(0)
复制代码 运行结果:
2 Scharr算子
2.1概念
它是Sobel算子的一种改进版本,专门用于盘算图像的梯度。Scharr算子与Sobel算子的主要区别在于它们的卷积核不同。Scharr算子在处理处罚边沿时比Sobel算子具有更高的精度,但它们在盘算时间和复杂度上是一样的,函数cv2.Scharr(),内涵参数与Sobel算子雷同,同样需要绝对值和组合。
2.2 实际测试
代码展示:
- import cv2
- at1 = cv2.imread('at1.png')
- cv2.imshow('at1',at1)
- cv2.waitKey(0)
- at1_64F = cv2.Sobel(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs = cv2.convertScaleAbs(at1_64F)
- at1_64F_y = cv2.Sobel(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y = cv2.convertScaleAbs(at1_64F_y)
- # # 组合
- at1_xy = cv2.addWeighted(at1_Abs,1,at1_Abs_y,1,0)
- cv2.imshow('at1y_xy_sobel',at1_xy )
- cv2.waitKey(0)
- # # scharr
- at1_64F_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs_Scharr = cv2.convertScaleAbs(at1_64F_Scharr)
- at1_64F_y_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y_Scharr = cv2.convertScaleAbs(at1_64F_y_Scharr)
- at1_xy_Scharr = cv2.addWeighted(at1_Abs_Scharr,1,at1_Abs_y_Scharr,1,0)
- cv2.imshow('at1y_xy_Scharr',at1_xy_Scharr)
- cv2.waitKey(0)
复制代码 运行结果:
3 Laplacian算子
3.1概念
是一种用于边沿检测的数学工具。在图像处理处罚中,Laplacian算子通常用于找到图像中的亮度快速变革的区域,这些区域每每对应于图像中的边沿大概物体边界。
不需要再进行图片组合。
3.2 函数
- cv2.Laplacian(图片变量,数据类型)
- cv2.convertScaleAbs(轮廓变量)
3.3 实际测试
代码展示:
- import cv2
- yuan = cv2.imread('yuan.png')
- cv2.imshow('yuan',yuan)
- cv2.waitKey(0)
- at1 = cv2.imread('at1.png')
- cv2.imshow('at1',at1)
- cv2.waitKey(0)
- ## Sobel
- at1_64F = cv2.Sobel(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs = cv2.convertScaleAbs(at1_64F)
- at1_64F_y = cv2.Sobel(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y = cv2.convertScaleAbs(at1_64F_y)
- # # # 组合
- at1_xy = cv2.addWeighted(at1_Abs,1,at1_Abs_y,1,0)
- cv2.imshow('at1y_xy_sobel',at1_xy )
- cv2.waitKey(0)
- # # # scharr
- at1_64F_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs_Scharr = cv2.convertScaleAbs(at1_64F_Scharr)
- at1_64F_y_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y_Scharr = cv2.convertScaleAbs(at1_64F_y_Scharr)
- at1_xy_Scharr = cv2.addWeighted(at1_Abs_Scharr,1,at1_Abs_y_Scharr,1,0)
- cv2.imshow('at1y_xy_Scharr',at1_xy_Scharr)
- cv2.waitKey(0)
- # laplacian
- at1_64F_Laplacian = cv2.Laplacian(at1,cv2.CV_64F)
- at1_Abs_Laplacian = cv2.convertScaleAbs(at1_64F_Laplacian)
- cv2.imshow('at1_Abs_Laplacian ',at1_Abs_Laplacian )
- cv2.waitKey(0)
- yuan_64F_Laplacian = cv2.Laplacian(yuan,cv2.CV_64F)
- yuan_Abs_Laplacian = cv2.convertScaleAbs(yuan_64F_Laplacian)
- cv2.imshow('yuan_Abs_Laplacian ',yuan_Abs_Laplacian )
- cv2.waitKey(0)
复制代码 运行结果:

4 Canny边沿检测
4.1 概念
Canny边沿检测是一种流行的图像处理处罚算法,用于检测图像中的边沿,并被认为是边沿检测中最优的算法之一。
4.2 步调
- 噪声降低:
- 使用高斯滤波器对图像进行平滑处理处罚,以减少图像中的噪声。高斯滤波器可以有用地降低噪声,同时保持边沿的尖锐度。
- 盘算梯度幅度和方向:
- 通过盘算图像中每个像素点的梯度幅度和方向,来确定可能的边沿。通常使用Sobel算子来盘算水平和垂直方向的梯度。
- 非极大值抑制:
- 对梯度幅度进行非极大值抑制,这一步会沿着梯度方向查抄每个像素,只有当该像素的梯度幅度是局部最大值时,才将其保存为边沿候选点,否则将其抑制(即设为0)。
- 双阈值确定边沿:
- 应用两个阈值(高阈值和低阈值)来确定真实边沿和潜在边沿。梯度幅度高于高阈值的像素被标记为强边沿,梯度幅度低于低阈值的像素被抑制,梯度幅度在两个阈值之间的像素被标记为弱边沿。
- 边沿跟踪和边沿毗连:
- 最后,通过边沿跟踪和边沿毗连来强化边沿。通常,算法会查抄弱边沿像素是否与强边沿像素相连,如果是,则将其标记为强边沿。这个过程可以确保边沿是一连的。
4.3 优点
Canny边沿检测算法的优点包括:
- 精良的检测效果:Canny算法可以或许检测到图像中的真实边沿,同时抑制噪声。
- 边沿定位精度:由于使用了梯度方向,Canny算法可以或许更精确地定位边沿。
- 参数可调:通过调解高斯滤波器的大小、阈值等参数,可以适应不同的图像和边沿检测需求。
Canny边沿检测算法在盘算机视觉和图像处理处罚领域得到了广泛应用,尤其是在需要精确边沿检测的场所。
4.4 函数及参数理解
- cv2.Canny(图像变量,低阈值,高阈值),低于低阈值为0,高于高阈值为255
4.5 实际测试
代码展示:
- import cv2
- at1 = cv2.imread('at1.png')
- cv2.imshow('at1',at1)
- cv2.waitKey(0)
- at1_64F = cv2.Sobel(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs = cv2.convertScaleAbs(at1_64F)
- at1_64F_y = cv2.Sobel(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y = cv2.convertScaleAbs(at1_64F_y)
- #
- # # # 组合
- at1_xy = cv2.addWeighted(at1_Abs,1,at1_Abs_y,1,0)
- cv2.imshow('at1y_xy_sobel',at1_xy )
- cv2.waitKey(0)
- # #
- # # scharr
- at1_64F_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=1,dy=0)
- at1_Abs_Scharr = cv2.convertScaleAbs(at1_64F_Scharr)
- at1_64F_y_Scharr = cv2.Scharr(at1,cv2.CV_64F,dx=0,dy=1)
- at1_Abs_y_Scharr = cv2.convertScaleAbs(at1_64F_y_Scharr)
- at1_xy_Scharr = cv2.addWeighted(at1_Abs_Scharr,1,at1_Abs_y_Scharr,1,0)
- cv2.imshow('at1y_xy_Scharr',at1_xy_Scharr)
- cv2.waitKey(0)
- # laplacian
- at1_64F_Laplacian = cv2.Laplacian(at1,cv2.CV_64F)
- at1_Abs_Laplacian = cv2.convertScaleAbs(at1_64F_Laplacian)
- cv2.imshow('at1_Abs_Laplacian ',at1_Abs_Laplacian )
- cv2.waitKey(0)
- # # canny
- at1_canny = cv2.Canny(at1,130,255)
- cv2.imshow('at1_canny',at1_canny )
- cv2.waitKey(0)
复制代码 运行结果:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |