【发布时间】:2017-07-07 17:15:04
【问题描述】:
我正在尝试在 Python 中实现笔画宽度变换。我在互联网上浏览了许多堆栈溢出问题和答案以及其他资源,但没有找到它的实现。所以我决定自己试试。
执行Canny边缘检测后,我的第一步是计算图像的x和y导数
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
然后我如何组合这些以获得图像中每个点的渐变?另外,如何计算笔画的宽度?
我正在使用原始 IEEE Paper(直接来自 Microsoft here 的免费论文)中给出的步骤作为参考。步骤说明在第 3 页右侧的底部。
【问题讨论】:
-
检查 C++ 代码here 以获得一个想法。这有点过时了......但了解它的工作原理仍然很有用。提示:最好将 x 和 y 导数分开
-
SWT 使用梯度的角度,您可以轻松计算;你有
x和y方向的幅度,所以你可以用反三角函数(如arctan)来获取角度。 -
@AlexanderReynolds 或者你认为我可以使用这个 - docs.opencv.org/2.4/modules/core/doc/…?
-
还有,那怎么才能找到笔画的宽度呢?
-
@Sibi 是的,请注意它只是像我提到的那样计算
atan2(y,x)。本文讨论了如何计算笔画宽度。基本思想是从 Canny 中的一个像素开始,跟随渐变的方向,直到从 Canny 中找到另一个像素。如果渐变方向是相反的,那么这就是您的笔画宽度,除非这些像素中的任何一个之前已经被击中并存储了一个较低的值。
标签: python opencv image-processing