Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Камера: захват изображений, видео и вывод на экран


Автор: Xonxt 24.3.2011, 15:43
Доброе время суток.

Вот столкнулся с такой проблемой: необходимо в рамках одного проекта обеспечить захват изображения с камеры, вывод его в окно (на какой-нибудь Контролз), а также иметь возможность в любой момент начать и остановить запись видео (в AVI), а также захват изображения (и сохранение его в файл).

Требования:
* работать должно как можно быстрее и занимать в памяти как можно меньше места;
* камера - аналоговая (черно-белая, требует внешний источник питания и подключается через специальный USB-тюнер), поэтому не все программы и фреймворки её воспринимают.

Для решения задачи я выбрал DirectShow.NET. Если есть варианты получше, пожалуйста, предлагайте.

Проблема в чем. Насколько я понял, инициализация потоков Preview (вывод в окно), Захвата изображений и Захвата видео происходят на начальном этапе. И в предоставленных примерах было ИЛИ ТОЛЬКО захват изображений и Preview, ИЛИ ТОЛЬКО захват видео и Preview.

Подружить их вместе у меня не получается. Помогите, пожалуйста, если кто-то в этом разбирается. Проект приложен в аттачменте. Здесь инициализация собственно потоков происходит в методе CaptureVideo(). Я выделил соответствующие фрагменты регионами (#region). Заметьте, что фрагменты PICTURE и VIDEO отказываются сосуществовать вместе.

Гугл молчит... Как будто никому раньше не приходилось решать подобную задачу...

Автор: Voyager 24.3.2011, 17:59
Тоже интересует этот вопрос.
Вы не смотрели в сторону VLC, например вывод, остановка и продолженние - ActiveX контрол AxAXVLC.AxVLCPlugin2? Запись видео - через сам VLC (вызов с параметрами, либо еще как-то так, правда это может быть в другом потоке).

Автор: Xonxt 30.3.2011, 08:21
В общем, более менее разобрался.
Изображения по-прежнему снимаются тем же образом. А видео записывается многократным вызовом этого самого метода захвата изображения по таймеру и записью через AForge'вский AVI Writer. Конечно, не самый лучший вариант, но скорость работы всего этого добра вполне позволяет обеспечить достойный фреймрейт.

А теперь вопрос. Может все-таки существует более быстрое и элегантное решение? Может все-таки есть другие более шустрые варианты?

Автор: Ky7m 30.3.2011, 10:28
Можно попробывать OpenCV, а под неё обвертку EMGU. Пример http://habrahabr.ru/blogs/personal/78150/ 
А так же Aforge.Net, тоже позволяет осуществлять запись в файл. Но проблема в том, что это скорей всего обвертка для DirectShow, но работает быстро.
ДЛя прочтения рекомендую http://habrahabr.ru/blogs/development/111609/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)