在 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 毫秒,所以这个例子将以大约 15 秒的速度播放一个 30 fps 的视频。两倍的速度(减去抓取一帧所需的时间)。
如果您真的想控制从视频文件中抓取的方式和内容,另一种选择是使用 GStreamer API 抓取图像,然后转换为 OpenCV 进行图像处理。您可以在这篇文章中找到关于此的一些信息:MJPEG streaming and decoding
关于c++ - OpenCV - 显着提高播放帧速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070528/