Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV:沿单像素分支搜索像素_Opencv - Fatal编程技术网

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

OpenCV:沿单像素分支搜索像素,opencv,Opencv,我目前正试图找到一种在二进制图像中存储单独“分支”的简洁方法。这个小动画解释了这一点: 当我沿着分支走的时候,我需要收集组成单个像素宽分支的像素索引。当我到达一个连接点时,它应该分开并存储新的分支 一种方法是创建一个3x3子区域,找出其中是否有白色像素,相应地移动它,如果有两个以上的子区域,则创建一个连接点。始终存储上一个子区域,以便可以使用它确保我们不会移动到已扫描的区域。 但要想弄清楚我会怎么做有点棘手 我基本上需要根据“直线/曲线”层次对像素重新排序。然后,应用程序的另一部分将重新绘制图

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

当我沿着分支走的时候,我需要收集组成单个像素宽分支的像素索引。当我到达一个连接点时,它应该分开并存储新的分支

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


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

我不知道您是否可以将其应用于您的案例中,但您应该看看cv::findContour。 你将得到一个有序点的向量


啊,试过了。findContours不能很好地处理单像素线。它也不适合我以后想用数据做的事情。我是个白痴。这种方法确实有效,特别是在预先应用细化的情况下。这看起来像是一个图,其中连接点是节点,单像素宽的分支是图的边。从任意初始点开始,您可以通过应用图遍历算法来发现所有分支和连接,如或,您可以查看@pray您需要在此处进行搜索吗?它是从分支开始并沿分支移动的约束吗?如果您可以“看到”整个图像,则更容易对分支进行分组和标记。如果不能,则需要深度优先搜索,然后返回交叉点搜索另一个交叉点;每次都存储数据——正如Alexey现在建议的那样。我可以看到整个图像,问题是需要重新排列像素。输入为手写文本,需要将其翻译为一组点(每个字符/数字等),稍后需要重新绘制(而不是通过OpenCV)。处理重绘的零件要求它是一组点,在这些点之间绘制线。