赞
踩
import cv2
import numpy as np
img = cv2.imread("D:\\picture\\1.jpg", 0)
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300))
cv2.imshow("canny", cv2.imread("canny.jpg"))
cv2.waitKey()
cv2.destroyAllWindows()
输入:
输出:Canny边缘检测算子
canny算法原理理解: https://blog.csdn.net/yuanpan/article/details/82011826
Canny的主要贡献是推导出了最有边缘检测算子。他考核边缘算子的指标如下:
(1)低误判率,即尽可能少地把边缘点误认为是非边缘点;
(2)高定位精度,即准确地把边缘点定位在灰度变化最大的像素上;
(3)抑制虚假边缘。
Canny算法可以减少小模板检测中的边缘终端,有利于得到较完整的线段。Canny算子的边缘检测效果优于传统的Sobel和Marr检测算子。
canny算法分为五步:
1.高斯模糊(高斯模糊为了去除噪声,降低伪边缘的识别。高通滤波器有一个称为半径的属性,所以高斯模糊的半径选择很重要,它决定了多大面积的邻近像素参与滤波运算)
2.计算梯度幅值和方向(可以通过Sobel算子来计算)
3.非最大值抑制(非极大抑制能够保留局部最大梯度而抑制其他所有梯度值)
4.双阈值(设置高阈值和低阈值,大于高阈值的像素点被称为强边缘点,介于高阈值和低阈值之间的像素点被称为弱边缘点)
5.滞后边界跟踪(针对上述的弱边缘点很可能含有由噪声导致的强边缘点,利用滞后边界跟踪方法,如果一个弱边缘点周围没有一个强边缘点与之连通,则该弱边缘点为真弱边缘点,被舍弃掉)
其实canny算法的原理过程虽然复杂,但是最后被封装在cv2库中,我们如果想看一张图片的canny算子效果图,只需要调用cv2.Canny()这个函数即可。
img = cv2.imread("D:\\picture\\1.jpg", 0)
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300))
cv2.imshow("canny", cv2.imread("canny.jpg"))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。