C ++无法在OpenCV中集成JPEG管道

3

我已经查阅了大量关于OpenCV和Gstreamer的帖子,但仍无法解决我的错误。我正在尝试在OpenCV中打开一个Gstreamer管道。我已经使用GStreamer构建了OpenCV,并且在CMake步骤中显示YES,表示OpenCV已经成功构建。从命令行检索流的命令可以正常工作,但在OpenCV中只显示一帧并停止。

我的服务器语法:

gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 ! jpegenc ! rtpjpegpay ! udpsink host=<IP Address> port=5000  

我在OpenCV中的客户端语法(C++):

Mat frame;

//create video capture from video camera
VideoCapture cap("udpsrc port=5000 ! application/x-rtp,encoding-
name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink ! appsink");

cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
for(;;) 
{
    cap >> frame;

    char c = (char)waitKey(1);

    //![display]
    imshow(window_name, frame);

    frame.release();
}

错误信息:   GStreamer 插件:嵌入式视频播放停止;模块 autovideosink0-actual-sink-xvimage 报告:输出窗口已关闭。OpenCV 错误:未指定错误(GStreamer:无法启动管道)在 icvStartPipeline,文件 /home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/src/cap_gstreamer.cpp,行 383 终止后被调用,抛出了一个 'cv::Exception' 实例,表示:/home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/src/cap_gstreamer.cpp:383: error: (-2) GStreamer: unable to start pipeline in function icvStartPipeline 请提供任何帮助,我已经参考了至少20篇 Stack 帖子,但离解决问题还有很大距离,除了在 OpenCV 中启用 Gstreamer 外,我甚至尝试了不同版本的 OpenCV。
谢谢
1个回答

1

VideoCapture cap("udpsrc port=5000 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! videoconvert ! appsink");

通过更深入地研究Gstreamer文档,我解决了这个问题。添加videoconvert解决了这个问题。根据Gstreamer文档,videoconvert会自动将数据转换为适合appsink的格式。这使得OpenCV VideoCapture可以正确读取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接