Я играл с образцом OpenCV squares.cpp, чтобы найти угловые координаты квадратов в изображении.
Образец иногда соответствует каждому объекту несколько раз. Теперь я хочу «объединить», вычислить средние угловые координаты для каждого квадрата, который, кажется, принадлежит одному и тому же объекту.
Результирующая структура функции findSquares представляет собой трехмерную векторную структуру типа:
[
[[10,10],[100,10],[100,100],[10,100]], // First square
[[100,100],[300,100],[300,100],[100,300]], // Second square
[[8,11],[110,5],[106,109],[10,97]], // Should be meged with the first square
[[112,99],[296,103],[312,98],[92,300]] // Should be merged with the second square
]
(я новичок в C ++, поэтому я пишу векторную структуру в нотации массива JavaScript, просто для визуализации структуры)
Моя идея состоит в том, чтобы:
- Найти все квадраты, совпадающие друг с другом (все 4 точки в пределах максимального расстояния, остальные 4 точки)
- Сгруппируйте их и вычислите средние 4 точки квадратов
- Сохранить новый усредненный квадрат в результирующем векторе
Есть ли хороший алгоритм для этого? Есть ли в OpenCV один встроенный? Есть ли лучший подход к этому?