Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在Jetson TK1上使用opencv VideoCapture打开gstreamer管道_C++_Opencv_Gstreamer_Tegra - Fatal编程技术网

C++ 无法在Jetson TK1上使用opencv VideoCapture打开gstreamer管道

C++ 无法在Jetson TK1上使用opencv VideoCapture打开gstreamer管道,c++,opencv,gstreamer,tegra,C++,Opencv,Gstreamer,Tegra,我编写了一个程序,从gstreamer管道读取帧,用opencv库处理它们,然后写回gstreamer管道 代码段: cv::VideoCapture cap("v4l2src ! video/x-raw, framerate=30/1, width=640, height=480, format=RGB ! videoconvert ! appsink"); if (!cap.isOpened()) { printf("=ERR= can't create video capture\

我编写了一个程序,从gstreamer管道读取帧,用opencv库处理它们,然后写回gstreamer管道

代码段:

cv::VideoCapture cap("v4l2src ! video/x-raw, framerate=30/1, width=640, height=480, format=RGB ! videoconvert ! appsink");
if (!cap.isOpened()) {
    printf("=ERR= can't create video capture\n");
    return -1;
}

cv::VideoWriter writer;
writer.open("appsrc ! videoconvert ! x264enc noise-reduction=10000 tune=zerolatency byte-stream=true threads=4 key-int-max=15 ! mpegtsmux ! udpsink host=localhost port=9999"
            , 0, (double)15, cv::Size(640, 480), true);
if (!writer.isOpened()) {
    printf("=ERR= can't create video writer\n");
    return -1;
}

/* Read/write frames as usual */
// Mat frame
// while true
//     cap >> frame
//     process the frame
//     writer << frame
cv::VideoCapture(“v4l2src!video/x-raw,帧速率=30/1,宽度=640,高度=480,格式=RGB!videoconvert!appsink”);
如果(!cap.isOpened()){
printf(“=ERR=无法创建视频捕获\n”);
返回-1;
}
视频写手;
writer.open(“appsrc!videoconvert!x264enc降噪=10000调谐=零延迟字节流=真线程=4键int max=15!mpegtsmux!udpsink主机=本地主机端口=9999”
,0,(双)15,cv::Size(640480),真;
如果(!writer.isOpened()){
printf(“=ERR=无法创建视频写入程序\n”);
返回-1;
}
/*像往常一样读/写帧*/
//垫架
//虽然是真的
//cap>>框架
//处理框架

//我个人的感觉是appsin/appsrc被阻塞为空缓冲区或满缓冲区。。拥有appsrc和appsink通常是非常棘手的-您的处理逻辑与管道所在的线程(即主线程)在同一个线程中吗?尝试添加队列,然后尝试添加参数max bytes(请注意,它可能会占用整个RAM!)。。调试也非常重要-了解如何调试gstreamer(提示GST_调试)——gl@otopolsky谢谢你的回复。我不认为将
队列
最大字节数
添加到管道中会有所帮助。(我试过了,但还是一样。)因为它构造捕获对象失败(它没有打开),所以它没有运行gstreamer管道。我认为这是opencv和gstreamer之间的问题,而不是管道问题。因为它不运行管道,所以我不能用GST_debug调试它。将尝试在另一台32位计算机上运行该程序。当我尝试在Ubuntu 14.04 32位虚拟机上执行该程序时,它产生了相同的错误。因此,我几乎可以肯定这是32位opencv的问题,它无法使用
VideoCapture
VideoWriter
打开gstreamer管道。可能是因为64位机器更强大,不会加载那么多缓冲区。。我认为同样的道理,你的appsrc+appsink设计本身就是阻塞的。。而阻塞行为是由您在较弱的机器上使用它触发的。这也可能是一个链接问题。。可能找不到gstreamer库或opencv之类的。。您必须自己检查所有这些;)我个人的感觉是appsin/appsrc被阻塞为空缓冲区或满缓冲区。。拥有appsrc和appsink通常是非常棘手的-您的处理逻辑与管道所在的线程(即主线程)在同一个线程中吗?尝试添加队列,然后尝试添加参数max bytes(请注意,它可能会占用整个RAM!)。。调试也非常重要-了解如何调试gstreamer(提示GST_调试)——gl@otopolsky谢谢你的回复。我不认为将
队列
最大字节数
添加到管道中会有所帮助。(我试过了,但还是一样。)因为它构造捕获对象失败(它没有打开),所以它没有运行gstreamer管道。我认为这是opencv和gstreamer之间的问题,而不是管道问题。因为它不运行管道,所以我不能用GST_debug调试它。将尝试在另一台32位计算机上运行该程序。当我尝试在Ubuntu 14.04 32位虚拟机上执行该程序时,它产生了相同的错误。因此,我几乎可以肯定这是32位opencv的问题,它无法使用
VideoCapture
VideoWriter
打开gstreamer管道。可能是因为64位机器更强大,不会加载那么多缓冲区。。我认为同样的道理,你的appsrc+appsink设计本身就是阻塞的。。而阻塞行为是由您在较弱的机器上使用它触发的。这也可能是一个链接问题。。可能找不到gstreamer库或opencv之类的。。您必须自己检查所有这些;)