Отслеживание прямоугольников с помощью opencv - PullRequest
1 голос
/ 06 июля 2010

Я хочу определить ориентацию и местоположение прямоугольника с веб-камеры. Я использовал алгоритм camshift, но он дал плохие результаты (высокая зависимость от освещения). Скажите, какие существуют механизмы для решения этой проблемы. Может быть, выходит какой-нибудь исходный код с похожей программой?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2011

Я не совсем уверен, о каком "Прямоугольнике" вы говорите, некоторые скриншоты или лучшее описание было бы здорово:

1: Если у вас есть проблемы с молнией, вам следует рассмотреть возможность разработки собственных алгоритмов для нейтрализации шума, путем преобразования вашего изображения в двоичное изображение и выполнения фонового вычитания (в зависимости от настройки и инициализации), разрушения, расширения и т. Д. это еще одна длинная тема, которую стоит изучить.

2: Сначала вы найдете все контуры вокруг прямоугольника, это можно сделать с помощью функции OpenCV findContours (); (помните, что изображение ДОЛЖНО быть двоичным) Когда сохранены все ваши точки контура, вы можете затем передать информацию в другую функцию OpenCV minAreaRect ();

Хранить информацию из minAreaRect (), которая является структурой типа RotatedRect ; внутри переменной и погрузитесь в структуру, чтобы извлечь степень вращения с помощью:

variablename.degree

0 голосов
/ 20 апреля 2013

В примере есть хороший работоспособный алгоритм, папка OpenCV = square.cpp.Нужен небольшой римейк (int main) для видео (CvCapture), кроме изображения.Работает нормально.

0 голосов
/ 26 февраля 2011

Это только идея.

Я обычно думаю о различении, чтобы отделить объект, который я хочу обнаружить / отследить. Я знаю, что вы можете обнаружить прямоугольники, используя другие методы.

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

После этого работайте с каплями. Я использую библиотеку cvBlobs и имею возможность отслеживать капли и обнаруживать капли. В этой библиотеке есть метод получения угла (ориентации), вы можете попробовать эту опцию.

 double cvAngle(CvBlob *blob);

Если ваши прямоугольники движутся, попробуйте обнаружить их, используя разницу между кадрами.

Извините за эту длинную речь. Я хотел бы, чтобы это могло помочь вам. Хорхе

...