Как обнаружить несколько квадратных центров в определенном порядке? (OpenCV 3.4.6, C ++) Отредактировано - PullRequest
1 голос
/ 11 июля 2019

Мне интересно, есть ли способ обнаружить центры всех квадратов, но в определенном порядке.Я уже написал обнаружение и сохранение точек, но мне нужно, чтобы они были обнаружены в определенном порядке.

Я предоставлю изображение, и на этом изображении будет написан (в краске) ​​определенный порядок обнаружения.

! [Порядок обнаружения]: 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.Я могу предоставить больше кода, если нужно, мне просто нужно решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...