Обработка видео с вебки, с чего начать?

uaha1979

Подключаем вебку к ПК, нужно ловить красный шарик на видео реалтайм.
С чего начать? что читать? я вообще ничего не знаю (не как с картинки выделить шарик, ни как поймать поток в вебки)

0000

Для начала мне кажется лучше всего определиться с инструментарием.
Вроде как Майкрософтовский Kinect позволит решить данную задачу с наименьшим геморроем, только вот можно ли у тебя заменить камеру им?

karkar

А ОС какая?
На винде получить поток картинок можно элементарно с помощью DirectShow. В юниксах есть его злой брат-близнец - GStreamer.

uaha1979

ОС - винда, тк мне проще работать с виндой.
Если потребуется (быстрее писать, шустрее работает, прочий профит то перейти на Unix нет проблем =).

marina7573

по опыту работы с DirectShow (весьма небольшому интуитивное решение - грабить бмп, анализировать его, перерисовывать бмп и выплёвывать его на вывод (с выделенным шариком) - будет тормозить жутко. Рекомендую копать в сторону фильтров DirectShow

karkar

мне проще работать с виндой

Тогда первые шаги такие:
1. Берем GraphEditPlus.
2. Строим такой вот граф:

Первый фильтр (камера, может называться иначе на другой машине) брать из списка Video Capture Sources, остальные - из списка DirectShow filters. Можно еще прежде, чем камеру с чем-то соединять, правой кнопкой кликнуть на выходной ее пин и вызвать SetFormat, там можно будет выбрать подходящий видеоформат, в котором получать картинки.
3. Построив граф, делаем File -> Generate code и видим исходник на С++ или С#, в котором строится такой граф, делаются необходимые вызовы по настройке форматов и заполняются всякие поля. Там можно большую часть кода по заполнению Format type поудалять, оставить лишь major type, subtype и разрешение.
4. Читаем про ISampleGrabber::SetCallback и ISampleGrabberCB::SampleCB, добавляем свой колбэк, который и будет для каждого кадра получать указатель на данные. Точнее, он будет получать указатель на media sample, у которого через GetBuffer можно получить указатель на сами данные. Их можно уже анализировать и можно менять сразу на месте, не копируя никуда. Формат данных будет определяться выбранным выше медиатипом.

margadon

ого
а для линукса подобный конструктор имеется?

karkar

Я не встречал.
Оставить комментарий
Имя или ник:
Комментарий: