我有一个关于使用OpenCV捕获帧的非常基本的问题。我的代码如下所示:
VideoCapture cap(0);
cv::Mat mat;
int i = 0;
while(cap.read(mat)==true) {
//some code here
i = i + 1;
}
效果很好。但是,当我查看OpenCV的日志时,它说
帧数收到225帧,抢到123帧。
这个抓取(123)通常与我的代码中的变量"i"(循环数)匹配。理想情况下,我的代码应该能够读取所有接收的帧,不是吗?有人可以解释这种行为吗?
调用cap.read(mat)
需要一定的时间,因为它必须获取和解码图像的视频源并将其转换为cv::Mat
格式。此时间量似乎大于视频的捕获速率。您可以使用以下命令确定视频捕获的每秒帧数:
double frames_per_second = cap.get(CV_CAP_PROP_FPS);
尝试计时cap.read(mat)
调用所需的时间,看看是否可以看到接收帧与抓取帧的比率与捕获时间 ( 1/frames_per_second
) 和cap.read(mat)
执行时间的比率之间的关系。
源:http://opencv-srf.blogspot.ca/2011/09/capturing-images-videos.html