我试图通过时间戳从视频中获取特定帧。要检查我的程序是否正常,我的视频的录制时间位于右下角。例如:
我的问题:如果我查找时间戳为6000的帧我得到了我显示的帧(很好)。但是,如果我使用Timestamp 60000查找帧,我希望使用 20:45:00 获取帧但是我得到 20:44:54 < /强>
我很确定我做错了什么,但我无法弄清楚是什么导致了6秒的差距:
这是我的代码:
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/core/mat.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/calib3d/calib3d.hpp"
using namespace std;
using namespace cv;
int main(const int argc, char *argv[])
{
int inTimestamp = atoi(argv[2]);
cv::VideoCapture capture(argv[1]);
if(!capture.isOpened())
{
//error!
cout << "Can not load video";
}
else
{
double prevtimestamp = 0;
Mat frame;
while(1)
{
capture.grab();
double timestamp = capture.get(CV_CAP_PROP_POS_MSEC);
if(inTimestamp >= prevtimestamp && inTimestamp <= timestamp )
{
//imshow("Frame",frame);
capture >> frame; //new frame
cout << timestamp;
imwrite("test.jpg",frame);
break;
}
prevtimestamp = timestamp;
}
}
return 0;
}