【发布时间】:2019-09-18 07:26:53
【问题描述】:
我通过 Python 3.7 使用 OpenCV。我有以下图像(请注意白色区域上的一些红色像素):
我知道图像中每个红色像素的 x 和 y 坐标。我想找到由单条白线互连的所有红色像素对。
让我们用 id(蓝色数字)标记每个红色像素:
如您所见,最上面标记为“1”的红色像素只有两个直接连接:一个与标记为“2”的红色像素连接,另一个与标记为“3”的红色像素连接。我想获得一个元组列表,其中每个元组都是一对相互连接的像素 ID。对于上面的图像,正确的结果是:
[(1,2),
(1,3),
(2,4),
(4,5),
(3,5),
(5,7),
(7,9),
(4,6),
(6,8),
(6,7),
(8,10),
(9,11),
(10,11),
(11,13),
(10,12),
(12,13),
(12,14),
(13,14)]
我还没有编写任何代码,因为我只能使用笨拙的自制算法扫描每个红色像素的 N 个邻居来检测方向。我确信有更有效的解决方案可以利用内置函数。
是否有任何 OpenCV 函数可以帮助完成这项任务?
【问题讨论】:
-
到目前为止您尝试过什么?请提供包含干净输入图像的minimal reproducible example,并指定所需的输出(元组列表、数组、...?)。使用什么编程语言?
-
还不清楚在这种情况下“连接”是什么意思?以“2”开头的一行上的所有 5 个红点是否连接?只有相邻的?或者只有它们是同一个正方形/三角形的角?
-
认为你的意思是某种线段交叉点,在将白色区域减少为线段之后(这本身可能是一个有趣的问题)。
-
只是一个随机的想法:如果你从一个点到另一个点画一条直线,并且这条线位于白色像素区域内并且从不接触黑色区域,那么 2 个点总是相邻的。
-
@s1rsimon,虽然我在一小时前也有类似的想法,但你的评论值得回答。
标签: python opencv python-3.7 detection