Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV VideoCapture::get(CV\u CAP\u PROP\u POS\u MSEC)返回0_C++_Opencv_Video Capture - Fatal编程技术网

C++ OpenCV VideoCapture::get(CV\u CAP\u PROP\u POS\u MSEC)返回0

C++ OpenCV VideoCapture::get(CV\u CAP\u PROP\u POS\u MSEC)返回0,c++,opencv,video-capture,C++,Opencv,Video Capture,在使用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);

在使用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);
}
你能帮我理解我做错了什么吗


谢谢:)

此错误已在最近的一次更新中修复。从链接:

cap_v4l.cpp文件中存在一个bug,导致此问题。时间戳的值是从第868行的缓冲区复制的,但缓冲区中的数据无效,因为我们已经在第865行调用了VIDIOC_QBUF ioctl。解决方案是翻转代码的两行,因此我们在调用VIDIOC_QBUF ioctl之前读取时间戳


此错误已在最近的一次更新中修复。从链接:

cap_v4l.cpp文件中存在一个bug,导致此问题。时间戳的值是从第868行的缓冲区复制的,但缓冲区中的数据无效,因为我们已经在第865行调用了VIDIOC_QBUF ioctl。解决方案是翻转代码的两行,因此我们在调用VIDIOC_QBUF ioctl之前读取时间戳


不幸的是,并非每个摄像头都支持opencv VideoCapture的每个属性。不幸的是,并非每个摄像头都支持opencv VideoCapture的每个属性。
Timestamp: 0