【发布时间】:2018-04-11 20:17:48
【问题描述】:
我正在尝试使用 OpenCV 显示视频流,但我在帧率方面遇到了可怕的问题。我的视频源最多可以输出 60 fps,但我将其限制为 30。问题是我以大约 2 fps 的速度接收它
我已尽可能简化我的程序以使其更易于阅读:
#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat image1;
int k;
const char* right_cam_gst = "nvcamerasrc sensor-id=0 ! video/x-raw(memory:NVMM),\
width=(int)640,\
height=(int)360,\
format=(string)I420,\
framerate=(fraction)30/1 ! nvvidconv flip-method=2 ! video/x-raw,\
format=(string)I420 ! videoconvert ! video/x-raw,\
format=(string)BGR ! appsink";
VideoCapture cap1 = VideoCapture(right_cam_gst);
for (;;)
{
cap1 >> image1;
imshow("image1", image1);
if(waitKey(1) == 27)
break;
}
}
这应该以流允许的最快速度抓取和显示图像。对吧?
感谢大家的帮助!
编辑看起来如果我只是尽可能快地显示图像,它只会以大约 1fps 的速度显示。这完全消除了相机。
系统: ubuntu on nvidia Jetson TX1
【问题讨论】:
-
你在终端测试过gstreamer管道吗?
-
是的。我得到满 30 fps。
-
您可以尝试删除 imshow 和 waitKey,添加一些计数器并尝试刚刚捕获的 fps 吗?目的是找出哪个部分如此慢,捕获或渲染或等待键(等待至少 1 毫秒但可能更长)。
-
你的来源是什么?它是如何附着的?你的平台是什么?
-
看起来所有的延迟都来自 waitkey()。进行测量时,我发现它也平均约为 0.75 秒。为什么会这样?
标签: c++ opencv video opencv3.0