Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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/2/cmake/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_Maze - Fatal编程技术网

Opencv 简化迷宫的照片

Opencv 简化迷宫的照片,opencv,maze,Opencv,Maze,我正在做一个项目,在那里我需要拍摄一张类似迷宫的照片 并找到一条路径引导sphero机器人穿过迷宫(找到迷宫起点的方法已经存在)。我已经过滤了图像,这样我就可以清除迷宫的墙壁,结果是 简单的方法是对像素进行BFS,虽然可以工作,但需要很长时间才能实用。我想做的另一个方法是将迷宫简化为单元,然后求解它。我已经成功地这样做了一个理想的数字显示 和(理想的意思是一切都是直的,所有的墙都有相同的宽度等) 我的问题是,我该如何处理原始过滤照片,就像理想情况下使用的方法一样,使用墙的像素宽度,这在实际情况下

我正在做一个项目,在那里我需要拍摄一张类似迷宫的照片 并找到一条路径引导sphero机器人穿过迷宫(找到迷宫起点的方法已经存在)。我已经过滤了图像,这样我就可以清除迷宫的墙壁,结果是

简单的方法是对像素进行BFS,虽然可以工作,但需要很长时间才能实用。我想做的另一个方法是将迷宫简化为单元,然后求解它。我已经成功地这样做了一个理想的数字显示 和(理想的意思是一切都是直的,所有的墙都有相同的宽度等)


我的问题是,我该如何处理原始过滤照片,就像理想情况下使用的方法一样,使用墙的像素宽度,这在实际情况下不是一个常数?我在python上使用opencv。

你能为迷宫假设一个已知大小的网格吗?你的迷宫是10x10

我同意你的建议,把图像简化成示意图。假设您知道网格大小,将其覆盖,并测试正方形角落之间的每面墙是否存在。从可能有墙的地方取一个舒适的分区(numpy切片)。测试计数像素,并检查这是否足够墙或很少像素(没有墙,最多噪音)

如果不知道网格的大小,可以进行测试。拍摄平面照片,分别汇总图像的每一行和每一列,并检查代表墙的峰值。数一数山峰

你的照片扭曲了。确保木板是平的。然后应用透视变换来校正迷宫


像素上的BFS需要线性时间。它的速度几乎和任何一种图像处理算法一样快。如果它能为您完成任务,那么您应该这样做。@MattTimmermans我知道它是线性的,但实际上需要大约5分钟才能完成,这使得它无法使用。您在实现过程中犯了一个错误。如果你在C++中工作,可能需要少于20毫秒,java中的40毫秒。甚至python也不会花费超过一秒或两秒的时间。@MattTimmermans很有可能,我正在使用python。稍后我将研究修复算法。谢谢你的时间参考,我实际上认为那是python的好时机,因为它有很多操作。谢谢你的回答。这种方法会非常有效,但我认为目前的主要问题是我拍的那张纸不是平的(正如你提到的)。在真实场景中,我会有一个平面(木制迷宫),我也知道网格的大小,所以这不应该是一个问题。我可以处理你发布的图片,这样就足够了。你只需要处理不完美。查找多边形,按区域过滤(忽略最小的),尝试接近每个多边形,看看它是否为四边形,选择最大的一个,这是您的目标。使用getPerspectiveTransform和warpPerspective进行校正。哦,对了,这是一个有入口和出口的迷宫。我明白了,这比简单地找到恐龙要复杂一些。。。我想先用Convxhull再用approxPolyDP来解决这个问题。但可能需要更多的混乱。。。迷宫的轮廓不是“封闭的”。霍夫变换可能很有用。你可以希望找到长线,你可以选择最左边,最上面,最右边,最下面的直角,然后把它们作为边,从那些不完整的线段中计算出角。假定在一个角落里进出。如果它在脸的中间,你会得到两条半长的线…可以分析线集并跨间隙连接它们。涉及一点向量数学来确定两条线是否共线以及间隙有多宽。我已经成功地做到了。我已经使用霍夫变换来识别代表墙壁的线条,并从那里构建了迷宫。它工作得很好,非常感谢你的帮助。