首页 > 解决方案 > 如何以特定顺序检测多个正方形中心?(OpenCV 3.4.6, C++) 已编辑

问题描述

我想知道是否有一种方法可以检测所有正方形的中心,但是以特定的顺序。我已经编写了点的检测和存储,但我需要按特定顺序检测它们。

我将提供一张图像,在该图像上将写(油漆)特定的检测顺序。

!【检测顺序】:https ://imgur.com/a/b3i0lxz

目前,它从底部->向上(4->3->2->1->6->5)检测。我希望订单为 1->2->3->4->5->6,就像图像上所说的那样。

我目前唯一的想法是使用 push_back/push_front 存储点。另外,我的另一个想法是制作 6 个 if 语句来检测图像的特定部分......比如

if(rect_position[0]) 
  center_point[0] = rotatedRect.center
else if(rect_position[1])
  center_point[1] = rotatedRect.center
.
.
.

其中rect_position[0]将保存 x0, y0, x1, y1 (基本上制作另一个矩形,如果检测到的点在该矩形内,则写下该点)。相机不会移动,面部会随着小幅度的移动而静止。

另外,我用鼠标来指定顺序,使用void CallBackFunc,但我也不允许这样做,因为教授希望检测是自动的。

任何事情都会有所帮助:教程、提示、新想法,非常感谢。

我正在存储以下点:

for (int i = 0; i < contours.size(); ++i) {
  center_points[i] = rotatedRect.center;
}

使用 inRange 和 findContours 函数和 RotatedRect 检测正方形。如果需要,我可以提供更多代码,我只需要一个解决方案。

标签: opencv

解决方案


推荐阅读