在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);
还有另一种方法可以达到预期效果吗?任何建议都将不胜感激。
更新 只是为了澄清,回放速度并不慢,我只是在寻找一种让它更快的方法。
答案 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