OpenCV -从播放显著提高帧率

OpenCV - Dramatically increase frame rate from playback

本文关键字:高帧率 帧率 播放 OpenCV      更新时间:2023-10-16

在OpenCV中有一种方法可以显著提高视频(.mp4)的帧率。我尝试了一些方法来增加视频的播放,包括:

增加帧率:

cv.SetCaptureProperty(cap, cv.CV_CAP_PROP_FPS, int XFRAMES)

跳帧:

for( int i = 0; i < playbackSpeed; i++ ){originalImage = frame.grab();}

video.set (CV_CAP_PROP_POS_FRAMES, (double)nextFrameNumber);

是否有其他方法可以达到预期的结果?如有任何建议,不胜感激。

只是为了澄清,播放速度并不慢,我只是在寻找一种方法,使它更快。

您正在使用旧的API (cv.CaptureFromFile)从视频文件捕获。

如果你使用新的c++ API,你可以以你想要的速率抓取帧。下面是一个非常简单的示例代码:

#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
    VideoCapture cap("filename"); // put your filename here
    namedWindow("Playback",1);
    int delay = 15; // 15 ms between frame acquisitions = 2x fast-forward
    while(true)
    {
        Mat frame;
        cap >> frame; 
        imshow("Playback", frame);
        if(waitKey(delay) >= 0) break;
    }
    return 0;
}

基本上,您只需在每个循环中抓取一帧,并使用cvWaitKey()在帧之间等待。你在每帧之间等待的毫秒数将设置你的加速。在这里,我设置了15毫秒,所以这个例子将播放一个30帧/秒的视频。速度的两倍(减去抓取一帧所需的时间)。

另一个选择,如果你真的想控制如何以及从视频文件中抓取什么,是使用GStreamer API来抓取图像,然后转换为OpenCV进行图像处理。你可以在这篇文章中找到一些关于这个的信息:MJPEG流和解码