低FPS与OpenCV视频捕获

Low FPS with OpenCV VideoCapture

本文关键字:视频 OpenCV FPS      更新时间:2023-10-16

我正在尝试使用OpenCV显示视频流,但是我的帧率遇到了可怕的问题。我的视频源最多可以输出 60 fps,但我将其限制为 30。问题是我以大约 2fps 的速度接收它

我尽可能地简化了我的程序,使其更易于阅读:

#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

找到了答案!看起来即使我的以太网连接很快,它也以某种方式使用服务器进行计算。(不知道如何)。看这篇文章: https://devtalk.nvidia.com/default/topic/1025856/very-slow-framerate-jetson-tx1-and-opencv/?offset=8

禁用了Xserver并直接插入,我得到了完整的60 FPS。