2011-01-14 3 views
7

Я пытаюсь, чтобы OpenCV обрабатывал кадр в середине канала gstreamer.Добавьте обработку OpenCV к потоку видео gstreamer

У меня есть одна GStreamer труба генерации потока, посылая его в appsink для OpenCV код получить:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

И еще одна труба, загрузив ее с appsrc (к которому OpenCV посылает данные) и выводит его на экран :

appsrc name=src ! jpegdec ! xvimagesink 

Я открываю каждый кадр с запросом выдвижная буфера на раковине и обработать его с OpenCV, а затем использовать кнопочный буфер на СРК. Я делаю все это на Python.

По какой-то причине это не работает (ошибка сегментации).

Но я не пытаюсь это исправить; в любом случае это ужасно неэффективно. Мне просто интересно, есть ли лучший способ заставить OpenCV обрабатывать кадр, прежде чем он достигнет выходной раковины?

+2

Поскольку вы хотите больше, чем может предложить gst-opencv, если вы не против писать свою логику в C (или C++), возможно, вам стоит попробовать написать ее как плагин для gst? Вы можете взять один из источников плагина gst-opencv в качестве отправной точки – sinelaw

+1

Другое дело - ваш пример, похоже, просто захватывает v4l2, и я думаю, что API HighGui API opencv поддерживает это уже (или, по крайней мере, v4l без «2»). это было бы самым простым решением, если вам действительно не нужен gstreamer. – sinelaw

+0

1. Хорошее предложение, я могу это сделать. 2. Вы правы, я мог бы использовать HighGUI в этом случае, но v4l2src использовался просто в качестве примера. В фактическом приложении я намерен получить видеопоток из источника tcp, поэтому я не могу реализовать все это в OpenCV. – SMiLE

ответ

2

Вы попробовали gst-opencv? Он предоставляет несколько примитивов opencv в качестве плагинов gstreamer.

EDIT: Похоже, что он слит в gst-plugins-bad, и вышеуказанная ссылка устарела.

+0

Спасибо за ваш ответ. Я рассмотрел gst-opencv, но решил отказаться от него, потому что я хочу свободно обрабатывать видеофрагменты любым способом (например, применять алгоритмы машинного обучения для конкретного домена), а опции, предлагаемые gst-opencv, очень общие. – SMiLE

1

Я знаю, что прошло несколько лет с момента вашего первоначального вопроса, но для записи OpenCv может напрямую открывать конвейеры Gstreamer. См. (Self-) ответ в примере Using custom camera in OpenCV (via GStreamer).

И, кстати, OpenCv 3.0 (главная ветвь) фактически интегрирует поддержку gstreamer 1.0.

Смежные вопросы