OpenCV - 从播放中显着提高帧速率

时间:2014-06-05 21:32:35

标签: c++ performance opencv

在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);

还有另一种方法可以达到预期效果吗?任何建议都将不胜感激。

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

1 个答案:

答案 0 :(得分:1)

您正在使用旧的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 fps的视频。速度的两倍(减去抓取框架所需的时间)。

如果您真的希望控制从视频文件中获取的方式和内容,另一个选择是使用GStreamer API获取图像,然后转换为OpenCV以进行图像处理。您可以在以下帖子中找到有关此内容的一些信息:MJPEG streaming and decoding