我知道在使用 Canny 检测边缘之前对图像应用高斯模糊非常重要。我的问题是:cv2.Canny()
单独进行高斯模糊或者有必要应用cv2.GaussianBlur()
before cv2.Canny()
?文档在这一点上并不清楚。
回想一下,在 Python 中使用 OpenCV 实际上是 OpenCV 的 C++ 接口的包装器。 Canny边缘检测算法的C++实现文件可以在这里找到:https://github.com/opencv/opencv/blob/master/modules/imgproc/src/canny.cpp https://github.com/opencv/opencv/blob/master/modules/imgproc/src/canny.cpp
如果您检查此来源,您会发现图像上没有任何模糊处理。然而,由于 Yves Daoust 所做的修正(见下文),Sobel 边缘检测算法用于查找梯度。有一个aperture
输入参数,指定 Sobel 内核的大小。使用默认值意味着您使用的是 3 x 3 内核并且不应用模糊。但是,任何高于 3 x 3 的值都将使用高斯核。因此,如果您想使用默认的 Sobel 内核,则需要自己应用模糊。如果您改变 Sobel 内核的大小,则无需自己执行模糊处理。
事实上,在 OpenCV 官方教程中,他们演示了 Canny 的使用,在检测之前手动模糊了图像:https://docs.opencv.org/3.4/da/d5c/tutorial_canny_ detector.html https://docs.opencv.org/3.4/da/d5c/tutorial_canny_detector.html。然而,他们在算法之前使用 3 x 3 盒式过滤器,因为您使用的是 3 x 3 Sobel 内核。
tl;dr
- 如果您决定使用默认光圈/Sobel 内核大小,则需要在使用 Canny 边缘检测算法之前自行模糊图像。如果大于 3,则不必使图像模糊。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)