求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算子提取图像边缘的源程序的主要内容,如果未能解决你的问题,请参考以下文章