2011-01-14 6 views
7

J'essaie de faire en sorte que OpenCV traite une trame au milieu d'un canal gstreamer.Ajouter un traitement OpenCV à un flux vidéo gstreamer

Je une conduite d'gstreamer produisant le courant, en l'envoyant à appsink pour le code OpenCV pour recevoir:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

Et un autre tuyau d'obtenir à partir de appsrc (à laquelle OpenCV envoie des données) et délivrer en sortie sur l'écran :

appsrc name=src ! jpegdec ! xvimagesink 

J'ouvre chaque cadre avec une demande tampon de traction sur l'évier et le traiter avec OpenCV, puis utilisez push-tampon sur src. Je fais tout ça en Python.

Pour une raison quelconque, cela ne semble pas fonctionner (erreur de segmentation).

Mais je n'essaie pas vraiment de le réparer; c'est terriblement inefficace de toute façon. Je me demande simplement s'il existe une meilleure façon de faire en sorte qu'OpenCV traite le cadre avant qu'il n'atteigne un puits de sortie.

+2

Puisque vous voulez plus que ce que gst-opencv peut offrir, si cela ne vous dérange pas d'écrire votre logique en C (ou en C++), vous devriez peut-être essayer de l'écrire en plugin sur gst? Vous pouvez prendre l'une des sources des plugins de gst-opencv comme point de départ – sinelaw

+1

Autre chose - votre exemple semble juste prendre à partir de v4l2, et je pense que l'API HighGui d'opencv le supporte déjà (ou du moins v4l sans le '2'). ce serait la solution la plus simple si vous n'avez pas vraiment besoin de gstreamer. – sinelaw

+0

1. Bonne suggestion, je pourrais le faire. 2. Vous avez raison, je pourrais utiliser HighGUI dans ce cas, mais v4l2src a été utilisé simplement à titre d'exemple. Dans l'application actuelle, j'ai l'intention d'obtenir le flux vidéo à partir d'une source tcp, donc je ne peux pas vraiment mettre en œuvre le tout dans OpenCV. – SMiLE

Répondre

2

Avez-vous essayé gst-opencv? Il fournit plusieurs primitives opencv sous forme de plugins gstreamer.

EDIT: On dirait qu'il est fusionné dans gst-plugins-bad, et le lien ci-dessus est dépassée.

+0

Merci pour votre réponse. J'ai considéré gst-opencv mais j'ai décidé de le rejeter parce que je veux la liberté de traiter les images vidéo comme je le souhaite (par exemple, appliquer des algorithmes d'apprentissage automatique spécifiques au domaine) et les options offertes par gst-opencv sont très génériques. – SMiLE

1

Je sais que certaines années se sont écoulées depuis votre question initiale, mais juste pour l'enregistrement, OpenCv peut ouvrir directement les pipelines Gstreamer. Voir la (auto-) réponse au Using custom camera in OpenCV (via GStreamer) pour un exemple.

Et, à propos, OpenCv 3.0 (branche maître) intègre réellement le support de gstreamer 1.0.

Questions connexes