【发布时间】:2014-02-18 23:23:07
【问题描述】:
给定一个勾勒出字母 S 边缘的轮廓(例如,在漫画 sans 中),我怎样才能沿着这个字母的脊椎获得一系列点,以便以后使用线条、三次样条或其他曲线来表示这个形状- 代表技术? 我想在 Python/OpenCV 中使用 30-40 个点来处理和表示形状。
形态骨架化可以帮助解决这个问题,但该操作似乎总是会产生错误的分支。有没有更好的方法将轮廓折叠成字母的“S”形?
在下面的示例中,您可以看到由形态骨架化产生的错误的“蛇舌”状分支。如果这是算法应该做的事情,我不知道说他们是错误的是否公平,但对我来说,我不希望他们在那里。
以下是无字母的漫画:
骨架化的另一个问题是它的计算成本很高,但如果你知道一种使它能够健壮地形成像树枝一样的“蛇舌”的方法,那么我会尝试一下。
【问题讨论】:
-
您的意思是要“矢量化字符”吗?或“使用样条表示骨架”?
-
两者都会有帮助!据我了解,贝塞尔曲线在矢量图形中用于制作贝塞尔样条曲线。我认为对于上面使用单个三次样条表示的某些字符可能很困难 - 这就是为什么我以字母“S”开始问题。一开始即使是折线也可以...
-
图细化有一些简单的技巧。形成上述图表后,您可以剔除在一定距离之前未达到 n 分叉 (n>2) 的节点。
-
我不是专家,但距离变换(见docs.opencv.org/2.4.7/modules/imgproc/doc/…)对你想做的事情有帮助吗?
-
@AldurDisciple,我试过了,但似乎需要进一步处理,因为结果不是连接曲线。
标签: python opencv image-processing computer-vision morphological-analysis