Canny 算法
边缘:我的理解是在图像处理的过程中,针对我们图像处理的过程中,梯度变化以较大的地方能够让我们能够快速辨识,针对一个人脸,脸上有一些平滑的地方(没错我针对美颜的),与头发的接壤处,会让我们清楚的意识到这个人脸的大小形状等特征。通过线条我们能够很清晰的辨认一个人的特征,因此,图像边缘是图像处理之中很简单的任务之一。
Canny算法步骤
- 去燥(常用高斯滤波)
任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,使用高斯滤波可以去除常见的噪声。 - 计算梯度大小和方向
梯度的大小和方向往往可以反应图像灰度值的变化和方向,可以通过点乘一个sobel或其它算子得到不同方向的梯度值。
常见的梯度算子:canny算子,sobel算子,拉普拉斯算子 - 沿着梯度方向进行非极大值抑制
- 双边阈值处理
- 低于低阈值的舍弃,高于阈值的确定为边缘,在中间的如果与边缘相连接保留,否则舍去。
import cv2
img = cv2.imread("./images/25.jpg",cv2.IMREAD_COLOR)
cv2.imshow("canny",img)
img = cv2.convertScaleAbs(img,alpha=6,beta=0)
cv2.imshow("abs",img)
# 高斯滤波
img = cv2.GaussianBlur(img,(5,5),1)
canny = cv2.Canny(img,100,150)
canny = cv2.resize(canny,(500,500))
cv2.imshow("Canny",canny)
cv2.waitKey(0)