我正在尝试使用OpenCV 3.1.0录制视频时对帧进行时间戳记。但是,当使用VideoCapture::get(CV_CAP_PROP_POS_MSEC)获取所抓取的最后一帧的毫秒时间戳时,返回的值始终为0。

我正在使用的代码:

int fps = 10;

VideoCapture cap(0); // open the default camera

cap.set(CV_CAP_PROP_FPS, fps);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1024);

if(!cap.isOpened())  // check if we succeeded
    return -1;

Mat testFrame;
cap >> testFrame;
cap >> testFrame;
cap >> testFrame;

Size outSize = Size(testFrame.cols, testFrame.rows);

VideoWriter writer("video.avi", CV_FOURCC('M','J','P','G'), fps, outSize, true);

for(; ;)
{
    Mat frame;
    cap >> frame; // get a new frame from camera

    long stamp = cap.get( CV_CAP_PROP_POS_MSEC); // THIS DOESN'T SEEM TO WORK

    std::cout << "Timestamp: " << stamp << std::endl;

    writer.write(frame);
}

作为输出,我总是得到很多行,如下所示:
Timestamp: 0

您能帮我了解我在做什么错吗?

谢谢 :)

最佳答案

此错误已在最近的pull request中修复。从链接:

关于c++ - OpenCV VideoCapture::get(CV_CAP_PROP_POS_MSEC)返回0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38899857/

10-09 06:34