Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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-无法抓取所有帧_C++_Opencv - Fatal编程技术网

C++ OpenCV-无法抓取所有帧

C++ OpenCV-无法抓取所有帧,c++,opencv,C++,Opencv,我有一个关于使用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”(循环数)匹配。 理想情况下,我的代码应该能够读取所有接收到的帧,

我有一个关于使用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\u per\u second
)和执行
cap.read(mat)
所需的时间之间的关系

资料来源:

如果去掉“//some code here”代码会发生什么?然后抓取了多少帧?没错,我也试过:)而上面的实验实际上没有任何代码。如果我添加“这里有一些代码”,抓取的数量会进一步减少,例如41等。是的,每秒帧数为我打印30。