我有一个关于使用OpenCV捕获帧的非常基本的问题。我的代码如下所示:

VideoCapture cap(0);
cv::Mat mat;
int i = 0;
while(cap.read(mat)==true) {
    //some code here
    i = i + 1;
}

效果很好。但是,当我通过OpenCV查看logcat日志时,它说

帧收到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

关于c++ - OpenCV-无法捕获所有帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22873309/

10-15 06:00