opencv — кластеризация данных в C ++ с использованием openGL

Я работаю над проектом для отслеживания объектов, где я получаю данные (расстояние в мм и амплитуду) от лидарного датчика (Pepperl-Fuchs R2000).
Используя OpenGL и C ++, я отображаю данные на машине Linux.
введите описание изображения здесь
Теперь я хочу сгруппировать точки в кластеры по расстоянию.
Я не знаю, как поместить все кластеры в отдельные контейнеры в C ++?
Есть ли возможность, что я могу использовать выходные данные из OpenGL в качестве входных данных в OpenCV для отслеживания объектов?

5

Решение

Вы должны преобразовать данные OpenGL в структуры OpenCV. В OpenCV есть несколько встроенных функций для обмена данными, Смотри сюда. Вы также можете скопировать очки OpenGL в OpenCV Matили вектор OpenCV cv::Point3f, Как это сделать, зависит от структуры OpenGL, в которой представлены ваши точки. Если вам нужно конвертировать матрицы из OpenGL в OpenCV, учтите, что OpenGL хранит матрицы в мажорном порядке столбцов, тогда как OpenCV выполняет мажорный порядок строк.

Затем OpenCV предоставляет некоторые (ограниченные) кластерные решения.
В зависимости от вашего приложения, k-means может работать, но я бы посоветовал вам также взглянуть на другие методы кластеризации, такие как QuickShift или DBSCAN.

5

Другие решения

Вы можете легко отобразить все эти данные в OpenCV, используя карта (или [Point_] или [KeyPoint] в зависимости от вашего использования 2) функция.
После этого я бы предложил использовать DBSCAN потому что он работает на основе плотности и не требует количества кластеров (потому что я не думаю, что вы можете заранее определить количество кластеров здесь), как K-Means.

Замечания: Вы можете легко найти код C ++ для DBSCAN в Интернете.

1


Курсы программирования от Skillbox. Черная пятница!
Подробнее >>>
×