Здраствуйте.
Есть устройство видеозахвата (например, Web-камера).
Мне нужно построить граф такой, чтобы:
1. Анализировать видеопоток по кадрам и искать на них определенные геометрические объекты (например, линии известного цвета).
2. Выводить видеопоток с устройства видеозахвата в окно, накладывая на него при этом найденные геометрические объекты.
Подскажите конфигурацию фильтров для решения моей задачи)
Re: DirectShow \ Составление графа фильтров
От:
Аноним
Дата:
06.12.07 12:44
Оценка:
Здравствуйте, Garbager, Вы писали:
G>Здраствуйте. G>Есть устройство видеозахвата (например, Web-камера). G>Мне нужно построить граф такой, чтобы: G>1. Анализировать видеопоток по кадрам и искать на них определенные геометрические объекты (например, линии известного цвета). G>2. Выводить видеопоток с устройства видеозахвата в окно, накладывая на него при этом найденные геометрические объекты.
G>Подскажите конфигурацию фильтров для решения моей задачи)
А что вы подразумеваете под "конфигурацию фильтров"?
Здесь ИМХО простой граф + вставить ТрансформФильтр, а на конце либо VideoRender, либо в файл (Mux + File Writter). В самом фильтре
(либо через интерфейс, либо через колбэк функцию) реализуете вашу обработку... Все
А>А что вы подразумеваете под "конфигурацию фильтров"?
Ну в смысле какие с какими соединять)
А>Здесь ИМХО простой граф + вставить ТрансформФильтр, а на конце либо 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 штуки
А>1) Про захват с камеры и вывод на экран смотри пример (D:\DX90SDK\Samples\C++\DirectShow\Capture\AMCap) А>2) По поводу написания трансформ фильтра см. (D:\DX90SDK\Samples\C++\DirectShow\Filters\EZRGB24\) А>3) К этому времени, у тебя уже долно появиться понимание как соединить эти 2 штуки
Можно так. Граф: камера — sample grabber — video renderer.
Sample grabber каждый кадр передает Вашей callback функции, она анализирует и рисует, свой фильтр тогда не нужен.
Здравствуйте, 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-функции? Если да, то будут тормоза, если нет, то скорее всего отрисовка найденных геометрических объектов будет отставать от видео. И так и так плохо, или я чего то не понял.
Здравствуйте, Аноним, Вы писали:
А>Да, эта схема мне приходила в голову, только она вроде как получается "линейная" и мне не понятно, будет ли ждать VideoRenderer завершения работы callback-функции? Если да, то будут тормоза, если нет, то скорее всего отрисовка найденных геометрических объектов будет отставать от видео. И так и так плохо, или я чего то не понял.
Да, VideoRenderer БУДЕТ ЖДАТЬ окончания работы колбэк функции.
Вот по такой цепочке (графу) будут проходить ваши кадры (IMediaSample). Соотведственно, если вам надо много времени на обработку, то придеться извращаться .
PS как быдо предложено выше, вместо "Ваш фильтр", можно использовать ИСэмплГрабер