DirectShow \ Составление графа фильтров
От: Garbager  
Дата: 06.12.07 12:36
Оценка:
Здраствуйте.
Есть устройство видеозахвата (например, Web-камера).
Мне нужно построить граф такой, чтобы:
1. Анализировать видеопоток по кадрам и искать на них определенные геометрические объекты (например, линии известного цвета).
2. Выводить видеопоток с устройства видеозахвата в окно, накладывая на него при этом найденные геометрические объекты.

Подскажите конфигурацию фильтров для решения моей задачи)
Re: DirectShow \ Составление графа фильтров
От: Аноним  
Дата: 06.12.07 12:44
Оценка:
Здравствуйте, Garbager, Вы писали:

G>Здраствуйте.

G>Есть устройство видеозахвата (например, Web-камера).
G>Мне нужно построить граф такой, чтобы:
G>1. Анализировать видеопоток по кадрам и искать на них определенные геометрические объекты (например, линии известного цвета).
G>2. Выводить видеопоток с устройства видеозахвата в окно, накладывая на него при этом найденные геометрические объекты.

G>Подскажите конфигурацию фильтров для решения моей задачи)


А что вы подразумеваете под "конфигурацию фильтров"?

Здесь ИМХО простой граф + вставить ТрансформФильтр, а на конце либо VideoRender, либо в файл (Mux + File Writter). В самом фильтре
(либо через интерфейс, либо через колбэк функцию) реализуете вашу обработку... Все


Удачи
Re[2]: DirectShow \ Составление графа фильтров
От: Garbager  
Дата: 06.12.07 13:01
Оценка:
А>А что вы подразумеваете под "конфигурацию фильтров"?

Ну в смысле какие с какими соединять)

А>Здесь ИМХО простой граф + вставить ТрансформФильтр, а на конце либо VideoRender, либо в файл (Mux + File Writter). В самом фильтре

А> (либо через интерфейс, либо через колбэк функцию) реализуете вашу обработку... Все

Что есть "простой граф"?
В файл мне записывать не надо, только в окне показывать.
Если не затруднит, можно поподробнее?
Re[3]: DirectShow \ Составление графа фильтров
От: Аноним  
Дата: 06.12.07 13:58
Оценка:
Здравствуйте, Garbager, Вы писали:

А>>А что вы подразумеваете под "конфигурацию фильтров"?


G>Ну в смысле какие с какими соединять)


А>>Здесь ИМХО простой граф + вставить ТрансформФильтр, а на конце либо VideoRender, либо в файл (Mux + File Writter). В самом фильтре

А>> (либо через интерфейс, либо через колбэк функцию) реализуете вашу обработку... Все

G>Что есть "простой граф"?

G>В файл мне записывать не надо, только в окне показывать.
G>Если не затруднит, можно поподробнее?

ОК. Как я понял, естьнебольшие пробелы...
Итак надо читать DirectX SDK (или Платформ СДК) (ИМХО качай 9.0с СДК)

Как скачаешь, начинаешь читать
1) Про захват с камеры и вывод на экран смотри пример (D:\DX90SDK\Samples\C++\DirectShow\Capture\AMCap)
2) По поводу написания трансформ фильтра см. (D:\DX90SDK\Samples\C++\DirectShow\Filters\EZRGB24\)
3) К этому времени, у тебя уже долно появиться понимание как соединить эти 2 штуки

Будут проблемы пиши
Re[4]: DirectShow \ Составление графа фильтров
От: Garbager  
Дата: 06.12.07 14:06
Оценка:
А>1) Про захват с камеры и вывод на экран смотри пример (D:\DX90SDK\Samples\C++\DirectShow\Capture\AMCap)
А>2) По поводу написания трансформ фильтра см. (D:\DX90SDK\Samples\C++\DirectShow\Filters\EZRGB24\)
А>3) К этому времени, у тебя уже долно появиться понимание как соединить эти 2 штуки

спасибо, поглядим)
Re: DirectShow \ Составление графа фильтров
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 06.12.07 15:35
Оценка:
Можно так. Граф: камера — sample grabber — video renderer.
Sample grabber каждый кадр передает Вашей callback функции, она анализирует и рисует, свой фильтр тогда не нужен.
Re: DirectShow \ Составление графа фильтров
От: Anatoliy.Sviridenkov Россия  
Дата: 06.12.07 16:51
Оценка:
Здравствуйте, Garbager, Вы писали:

G>Здраствуйте.

G>Есть устройство видеозахвата (например, Web-камера).
G>Мне нужно построить граф такой, чтобы:
G>1. Анализировать видеопоток по кадрам и искать на них определенные геометрические объекты (например, линии известного цвета).
G>2. Выводить видеопоток с устройства видеозахвата в окно, накладывая на него при этом найденные геометрические объекты.

G>Подскажите конфигурацию фильтров для решения моей задачи)


Фильтр источник -> Your_Transform_Filter -> VideoRenderer

В VideoRenderer передаете хендл вашего окна, для вывода видео.

Your_Transform_Filter — Фильтр для анализа изображения.

Фильтр источник — это зависит от того что у вас за источник, для каких-то камер можно стандартные использовать.
Для каких-то придется, что-то свое писать.

Ну это классический граф. Он может видоизмениться причем очень сильно. Ну например если у вас с камеры идет JPEG Stream, то вы можете принять данные с камеры в вашем приложении, сразу обработать их и вывести их на экран — при такой конфигурации вам вообще DS не нужен. Если же вам нужно еще и в файл записывать, то тогда без DS не обойтись.

Если вам не очень хочется писать свой фильтр, то вместо Your_Transform_Filter можно использовать SampleGrabber. У себя в программе реализуете ISampleGrabberCB интерфейс и передаете его в SampleGrabber, полученный кадр обрабатываете и выводите на экран посредством GDI или GDI+, в таком случае вместо VideoRenderer нужно ставить NullRenderer.
Re[2]: DirectShow \ Составление графа фильтров
От: Аноним  
Дата: 07.12.07 06:12
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Можно так. Граф: камера — sample grabber — video renderer.

DM>Sample grabber каждый кадр передает Вашей callback функции, она анализирует и рисует, свой фильтр тогда не нужен.

Да, эта схема мне приходила в голову, только она вроде как получается "линейная" и мне не понятно, будет ли ждать VideoRenderer завершения работы callback-функции? Если да, то будут тормоза, если нет, то скорее всего отрисовка найденных геометрических объектов будет отставать от видео. И так и так плохо, или я чего то не понял.
Re[2]: DirectShow \ Составление графа фильтров
От: Garbager  
Дата: 07.12.07 06:19
Оценка:
Хорошо, а как насчет http://www.rsdn.ru/forum/message/2758739.1.aspx
Автор:
Дата: 07.12.07
Re[3]: DirectShow \ Составление графа фильтров
От: Аноним  
Дата: 07.12.07 06:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Да, эта схема мне приходила в голову, только она вроде как получается "линейная" и мне не понятно, будет ли ждать VideoRenderer завершения работы callback-функции? Если да, то будут тормоза, если нет, то скорее всего отрисовка найденных геометрических объектов будет отставать от видео. И так и так плохо, или я чего то не понял.


Да, VideoRenderer БУДЕТ ЖДАТЬ окончания работы колбэк функции.

Примерно ваш граф будет выглядить так


__________     __________
|        |    |   Ваш   |                               ______________
| Камера | -> |  фильтр |---.......................|---|.Video Render.| 
|________|    |_________|  |   _______________     |   |______________|
                           |-> | Callback func | ->
                               |_______________|


Вот по такой цепочке (графу) будут проходить ваши кадры (IMediaSample). Соотведственно, если вам надо много времени на обработку, то придеться извращаться .
PS как быдо предложено выше, вместо "Ваш фильтр", можно использовать ИСэмплГрабер

Удачи.
Re[4]: DirectShow \ Составление графа фильтров
От: Garbager  
Дата: 07.12.07 07:02
Оценка:
А>Да, VideoRenderer БУДЕТ ЖДАТЬ окончания работы колбэк функции.
А>Примерно ваш граф будет выглядить так

А>

А>__________     __________
А>|        |    |   Ваш   |                               ______________
А>| Камера | -> |  фильтр |---.......................|---|.Video Render.| 
А>|________|    |_________|  |   _______________     |   |______________|
А>                           |-> | Callback func | ->
А>                               |_______________| 
А>


Кул, надо попробовать, спасибо)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.