OpenCV:按时间戳获取帧

时间:2016-03-10 07:50:25

标签: c++ opencv opencv3.0

我试图通过时间戳从视频中获取特定帧。要检查我的程序是否正常,我的视频的录制时间位于右下角。例如:

enter image description here

我的问题:如果我查找时间戳为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;
}

0 个答案:

没有答案