我有一个关于使用OpenCV进行帧捕获的基本问题。我的代码如下所示:
VideoCapture cap(0);
cv::Mat mat;
int i = 0;
while(cap.read(mat)==true) {
//some code here
i = i + 1;
}
效果很好。但是,当我通过OpenCV查看logcat日志时,它会说
FRAMES收到225,抢了123。
这抓住了(123)通常与变量' i' (我的代码中的循环数)。 理想情况下,我的代码应该能够读取所有收到的帧,不是吗?有人可以解释这种行为吗?
答案 0 :(得分:1)
调用cap.read(mat)
需要一定的时间,因为必须获取并解码图片的视频Feed并将其转换为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