C++ OpenCV VideoCapture::get(CV\u CAP\u PROP\u POS\u MSEC)返回0
在使用OpenCV 3.1.0录制视频时,我正在尝试为帧添加时间戳。但是,当使用VideoCapture::get(CV_CAP_PROP_POS_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);
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