OpenCV从入门到精通——边缘检测算法Canny

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)

OpenCV从入门到精通——边缘检测算法Canny_第1张图片

你可能感兴趣的:(Opencv,算法,opencv,计算机视觉,边缘检测,cv)