【问题标题】:OpenCV: Searching for pixels along single-pixel branchesOpenCV:沿单像素分支搜索像素
【发布时间】:2013-07-17 11:50:25
【问题描述】:

我目前正在尝试找到一种在二进制图像中存储单独“分支”的简洁方法。这个小动画解释了它:

当我沿着分支走时,我需要收集构成单像素宽分支的像素索引。当我到达一个交汇点时,它应该分裂并存储新的分支。

一种方法可能是创建一个 3x3 的子区域,找出其中是否有白色像素,相应地移动它,如果有两个以上,则创建一个连接点。始终存储上一个子区域,以便可以使用它来确保我们不会移动到已扫描的区域。 不过,要弄清楚我将如何去做有点棘手。

我基本上需要根据“线/曲线”层次结构重新排序像素。然后应用程序的另一部分将重新绘制图形,其内部通过在点之间创建线来工作,因此需要将它们“排序”。

【问题讨论】:

  • 这看起来像graph traversal problem,其中连接点是节点,单个像素宽的分支是图形的边缘。从任意初始点开始,您可以通过应用图遍历算法(如breadth-first searchdepth-first search
  • 另外,您可以查看Connected Components Labeling
  • @pray 你需要在这里搜索吗?从分支开始并沿着分支移动是否有限制?如果您可以“看到”整个图像,则更容易对分支进行分组和标记。如果不能,那么您需要进行深度优先搜索,然后返回交叉点搜索另一个;每次都存储数据 - 正如 Alexey 现在建议的那样。
  • 我可以看到整个图像,问题是需要重新排列像素。输入是手写文本,需要翻译为一组点(每个字符/数字等),稍后需要重绘(不是通过 OpenCV)。处理重绘的部分要求它是一组点,在这些点之间画线。

标签: opencv


【解决方案1】:

我不知道你是否可以在你的情况下应用它,但你应该看看 cv::findContour。 你会得到一个有序的点向量。

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

【讨论】:

  • 啊,试过了。 findContours 不能很好地与单像素线配合使用。它也不太适合我以后想对数据做的事情。
  • 我是个白痴。这种方法确实有效,特别是预先应用了细化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2021-05-20
  • 2016-02-18
  • 2014-05-10
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多