OpenCV:沿着单像素分支搜索像素

5

我目前正在寻找一种整洁的方式来存储二进制图像中的不同“分支”。以下动画对此进行了解释:

searching for branches

当我沿着这些分支走时,我需要收集组成单像素宽度分支的像素索引。当我遇到一个交叉点时,它应该分裂并存储新的分支。

一种可能的方法是创建一个3x3子区域,查找其中是否有白色像素,根据情况移动它,如果超过两个,则创建一个交叉点。始终存储先前的子区域,以便我们不会移动到已经扫描过的区域。 不过,弄清楚如何操作还有点棘手。

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


这似乎是一个图遍历问题,其中交汇点是节点,单像素宽的分支是图的边。从任意初始点开始,可以通过应用图遍历算法(如广度优先搜索或深度优先搜索)来发现所有分支和交汇点。 - Alexey
此外,你可以了解一下连通区域标记 - Alexey
@pray 这里需要进行搜索吗?从一个分支开始并沿着它移动是一种限制吗?如果您可以“看到”整个图像,则更容易对分支进行分组和标记。如果您无法做到这一点,则需要进行深度优先搜索,并返回交叉口以搜索另一个;每次存储数据 - 正如Alexey现在建议的那样。 - baci
我可以看到整张图片,问题在于需要重新排列像素。输入是手写文本,需要将其翻译为一组点(每个字符/数字等), 然后再进行重绘(不通过OpenCV)。处理重绘的部分需要它成为一组点,它会在这些点之间画线。 - prayforbacon
1个回答

1

啊,我试过了。findContours函数对于单像素线条的处理不太友好。而且它也不太适合我后面想要做的数据处理。 - prayforbacon
我是个白痴。这种方法确实有效,尤其是在事先应用了细化处理的情况下。 - prayforbacon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接