求python中采用canny算子提取图像边缘的源程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求python中采用canny算子提取图像边缘的源程序相关的知识,希望对你有一定的参考价值。

参考技术A

需要下载pyopencv

#coding=utf-8

import pyopencv as cv

#读取图像

image=cv.imread("d:/lena.jpg")

#因为Canny算法只支持灰度图像,所以要事先转换

grayImage=cv.Mat(image.size(),cv.CV_8UC3) 

cv.cvtColor(image,grayImage,cv.CV_RGB2GRAY)

#先生成空的边缘图像

edges=cv.Mat(grayImage.size(),grayImage.type())

#进行Canny转换

cv.Canny(grayImage,edges,100,150)

#显示图像

cv.namedWindow("Canny Image")

cv.imshow("Canny Image",edges)

cv.waitKey()

本回答被提问者采纳

canny算子求图像边缘,edgebox那部分

 过程:

    1.      彩色图像转换为灰度图像
    2.      对图像进行高斯模糊
    3.      计算图像梯度,根据梯度计算图像边缘幅值与角度(这里其实用到了微分边缘检测算子来计算梯度幅值方向)

求x,y两个方向的梯度

技术分享图片

求幅值与角度

技术分享图片


    4.      非最大信号压制处理(边缘细化) 

也就是把角度分成4个值

技术分享图片

得到角度之后,比较中心像素角度上相邻两个像素,如果中心像素小于其中任意一个,则舍弃该边缘像素点,否则保留。

 

  5.      双阈值边缘连接处理

双阈值选择与边缘连接方法通过假设两个阈值

其中一个为高阈值TH另外一个为低阈值TL则有

a.      对于任意边缘像素低于TL的则丢弃

b.      对于任意边缘像素高于TH的则保留

c.      对于任意边缘像素值在TL与TH之间的,如果能通过边缘连接到一个像素大于


    6.      二值化图像输出结果

 

其实第4步就是通过角度去掉一些点,第5步通过幅值去掉一些点

 

https://blog.csdn.net/tigerda/article/details/61192943

https://blog.csdn.net/jia20003/article/details/41173767





以上是关于求python中采用canny算子提取图像边缘的源程序的主要内容,如果未能解决你的问题,请参考以下文章

图像边缘检测:Canny算子、Prewitt算子和sobel算子

sobel边缘检测优缺点与canny算子的优缺点?

图像处理之Canny边缘检测

Canny边缘检测

Canny边缘检测算法的实现

Canny边缘检测算法的实现