概述
边缘检测是利用图像中边缘像素值会发生剧烈变化来进行检测的,主要用于分割图像、提取特征等多个方面。
opencv中常用的算法有Canny边缘检测算法、Sobel算子、Laplacian算子、Scharr算子、Roberts算子、prewitt算子。这几种算法各有优劣,使用的场景和需求也相对不同。其中Canny边缘检测算法是最常用的一种算法,具有较好的性能和效果,通常被用作默认的边缘检测算法。
原理
Canny边缘检测算法的原理是:
- 通过高斯模糊减少噪声干扰
- 然后计算图像中每个像素的梯度和方向,以确定边缘的位置和方向
- 使用NMS(非极大值抑制)方法,将梯度方向垂直的像素进行抑制,从而得到比较细化的边缘
- 并使用双阈值进行处理,将低于低阈值的像素标记为弱边缘,将介于高低阈值间的像素标记为中间边缘,将高于高阈值的像素标记为强边缘
- 使用连接算法将中间边缘连接到强边缘上,从而实现边缘检测
例程
import cv2 as cv
def canny():
img = cv.imread("input.jpg")
# 第二个参数代表低阈值 第三个参数代表高阈值,试着调整这两个阈值,看看边缘检测效果吧!
canny_img = cv.Canny(img, 50, 210)
cv.imshow("source", img)
cv.imshow("canny", canny_img)
cv.waitKey(0)
if __name__ == '__main__':
print_hi('PyCharm')
canny()
效果
(我们可以通过调整阈值来达到不同的效果,自己动手试试吧~)
(图片仅学习使用,如有侵权,欢迎硬刚~)
标签:阈值,边缘,检测,像素,opencv,算法,图像处理,cv From: https://blog.51cto.com/gugu/6120616