Canny边缘检测---OpenCV-Python开发指南(22)

举报
择城终老 发表于 2021/07/27 00:16:42 2021/07/27
3.2k+ 0 0
【摘要】 目录 什么是Canny边缘检测获取图像的边缘 什么是Canny边缘检测 Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。该方法由John F. Canny于1986年发表。 Canny边缘检测主要分为4个步骤: (1)去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。 (2)计算梯度的幅度与方向 (3)非极大值抑制,即适当地让...

什么是Canny边缘检测

Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。该方法由John F. Canny于1986年发表。

Canny边缘检测主要分为4个步骤:

(1)去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。

(2)计算梯度的幅度与方向

(3)非极大值抑制,即适当地让边缘“变瘦”。

(4)确定边缘。使用双阈值算法确定最终的边缘信息。

在实际的图像边缘检测中,我们一般先用高斯滤波去除图像噪声(1),然后计算梯度的幅度与角度两个值(2),接着遍历图像中的像素点,去除所有非边缘的点(3)。最后,去除噪声所产生的虚边缘得到最终的边缘信息。(4)

在OpenCV中,它给我们提供了cv2.Canny()函数用于Canny边缘检测,其完整定义如下:

def Canny(image, threshold1, threshold2, edges=None, apertureSize=None, L2gradient=None):

  
 

image:8位输入图像

threshold1:处理过程中的第一个阈值

threshold2:处理过程中的第二个阈值

edges:计算得到的边缘图像

apertureSize:Sobel滤波器的孔径大小

L2gradient:计算图像梯度幅度的标识。它是一个布尔类型,默认值为False。如果为True,则使用更精确的L2范数进行计算,也就是两个方向的导数的平方和再开方,否则使用L1范数(直接将两个方向导数的绝对值相加),数学公式如下:

1

获取图像的边缘

既然我们已经了解了其方法的定义,以及具体的实现原理。下面,我们来通过一段程序获取图像的边缘信息,具体代码如下所示:

import cv2

img = cv2.imread("4.jpg", cv2.IMREAD_UNCHANGED)
result1=cv2.Canny(img,100,200)
result2=cv2.Canny(img,30,90)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.waitKey()
cv2.destroyAllWindows()

  
 

运行之后,得到的效果如下图所示:
2

可以看到,Canny边缘检测获取到的图像信息与抖音酷炫的人物轮廓分离实现的效果几乎一样。没错,其实抖音那种酷炫的人物轮廓分离特效,就可以使用Canny边缘检测实现。

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/113826782

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。