跟踪模式,以便使用opencv仅访问每个节点一次(欧拉路径)

跟踪模式,以便使用opencv仅访问每个节点一次(欧拉路径),opencv,bioinformatics,biopython,Opencv,Bioinformatics,Biopython,这是我一整年以来一直在努力解决的问题。直到年底都没有成功。我必须寻求专家的帮助和具体解决方案 我的问题陈述: 我一直在使用一些设计模式,如果存在欧拉路径(如下面的GIF所示),我希望通过编程跟踪这些模式。下面是我想画的图案和方式(GIF) 我想要达到的目标: 将设计模式图像作为输入。我希望在一个笔划中跟踪设计图案图像,如GIF中所示(GIF动画只是在一个笔划中绘制图案的示例)。一旦我以单笔划方式获得图像的x和y坐标(欧拉路径)。我将把这些坐标输入到我的程序中,以便只跟踪这些坐标 动画中需要注意的

这是我一整年以来一直在努力解决的问题。直到年底都没有成功。我必须寻求专家的帮助和具体解决方案

我的问题陈述:

我一直在使用一些设计模式,如果存在欧拉路径(如下面的GIF所示),我希望通过编程跟踪这些模式。下面是我想画的图案和方式(GIF)

我想要达到的目标:

将设计模式图像作为输入。我希望在一个笔划中跟踪设计图案图像,如GIF中所示(GIF动画只是在一个笔划中绘制图案的示例)。一旦我以单笔划方式获得图像的x和y坐标(欧拉路径)。我将把这些坐标输入到我的程序中,以便只跟踪这些坐标

动画中需要注意的事项:

1) 基本上,它是一个未被检测到的图形(节点是形状的顶点,边(如果存在)是两个顶点之间的笔划)。(欧拉路径)

以下是我用来构建图案的15种独特形状:

我有超过400个模式(下面已经显示了3个模式),到目前为止,我还没有找到一个通用的解决方案我已手动获取图案的x y坐标,并将其按顺序放置。但这根本不是可伸缩的

如何跟踪模式,使每个节点只访问一次?

第一种图案及其绘制方式:

第二种图案及其绘制方式:

第三种图案及其绘制方法:


如果你仍在努力解决上述问题,或许你可以研究旅行推销员的问题。TSP只访问城市一次。如果在你的例子中,每个节点都是一个穿越点,那么这可能会有所帮助

检查要查看的python代码。我已经检查过了,打印的语句看起来很好,很有条理。干得好


根据讨论进行编辑:,。

1。您尝试过的代码在哪里?2.我们怎么可能理解这些规则,这些规则会推动你想要完成的事情?这看起来像一个谜,不是一个可以回答的问题。你基本上已经有了一个未被发现的图形(节点是你形状的顶点,如果存在的话,边是两个顶点之间的笔划)。检查是否存在,然后完成;)@zindYou可能会问:如何跟踪模式,使每个节点只访问一次?然后@Miki对欧拉路径的评论就站了起来。选择任意点,检查是否存在欧拉路径,如果存在,则终止,如果不存在,则选择另一个点并重复。TSP用于访问所有城市,使旅行距离最小。但我试图在模式中找到欧拉路径。这将有助于我在不抬起指针或光标的情况下,一笔就可以跟踪模式。我的坏习惯。在这种情况下,“节点”是两个(400个)瓷砖之间的交叉点/连接。在制作图像的过程中,你能数一数正方形的数量吗?如果是这样,那么在画布3x3和4x4平铺中应该只绘制一个正方形。如果画布为5x5或更大,则至少一个平铺的两个正方形之间应存在空间距离。否则你会有重叠。在您的代码中包含这些信息,以避免和保护您的安全。然后,可以使用任意x、y点开始单笔画。如果用于五边形和六边形,也应用此规则;在他们之间偏离航线。检查这个答案。这给了我整个图像的所有方块。多亏了@MikiIf,你看了第1块瓷砖,水滴状的形状的曲线是否接触到了一个想象中的正方形的侧面?如果是这样,则在曲线不接触侧面的地方制作一个新图形;只有将与另一个平铺中的黑线互连的点。如果您这样做的话,您可以覆盖它,并使用定义的参数搜索正方形大小。通过这种方式,您可以获得正方形的轮廓(也称为第一像素行)。在正方形bgr(0,0,0)的三面和第四面上,你会得到一堆(bgr(255,255,255)像素。计算它的中心,你会得到图中该部分分块的节点坐标。对所有其他分块也这样做,你会很容易得到。将x,y与下一个分块数据进行比较在某些情况下,你会发现坐标x1=x2或y1=y2是相似的。瞧,你得到了连接点/节间。