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.
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
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
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