【发布时间】:2017-12-11 22:21:04
【问题描述】:
和一群朋友,我们正在尝试在 Raspberry Pi 上完成一项计算机视觉任务,使用 OpenCV 库使用 C++ 进行编码。
让我先解释一下任务。 有一个由 16 个独立的正方形组成的图案,每个正方形是红色、黄色或蓝色的。我们正在将 rasperry pi 安装在带有摄像头模块的四轴飞行器上,并收集该模式的视频源。
我们必须检测正方形的颜色,这很容易通过对网络的一些研究来完成。棘手的部分是我们还必须检测正方形的顺序,以便按顺序将颜色保存在数组中。
到目前为止,我们已经完成了对所需颜色(红色、黄色、蓝色)的过滤以确定正方形。
example pattern to recognize and our process so far
在第二张图片中,我们知道每个正方形的颜色和中心点。我们需要的是一种将它们按顺序写入文件或屏幕的方法。
为了找到顺序,我们尝试了几种找到角点的 OpenCV 方法。手边有角点,我们比较了每个点并确定了端点,这样我们就可以绘制一个边界矩形并克服一些扭曲。
但由于四轴飞行器获取视频流,因此总是存在高失真的机会。这会扰乱我们的角点理论,导致颜色顺序错误。例如,它可以捕获这样的图像:
通过比较它们的中心点来找到这些正方形的顺序是不对的。它也无法找到端点以在它们周围绘制更大的矩形以展平图案。然后下单……
我要求的是算法建议。我们在寻找角落时是否完全走错了方向?是否可以在不考虑失真的情况下确定顺序?
提前致谢。
【问题讨论】:
-
使用 cv::minAreaRect 得到一个围绕所有框的旋转边界矩形。然后选择一个角作为网格的左上角(变形 >= 45 度不明确)并计算相对于旋转边界矩形的中心点内容(例如,通过将所有中心点向后旋转)。
-
使用旋转的边界矩形作为基础,您甚至可以猜测网格(如果您知道网格大小)并选择最适合每个猜测的网格位置的分段颜色框。
标签: c++ opencv image-processing color-detection