[OpenCV] cv::VideoCapture中read和grab+retrieve的区别

说明:

read:直接获取下一帧数据编码后的图像。

grab+retriebe:获取下一帧的数据(grab)到一个用户无法访问的内存区,根据通道号进行编码生成相应的图像(retrieve)。

例子:

立体摄像机(stereo camera)中,每一帧图像都拥有两个,获取下一帧数据这个动作很快,但是进行编码这个动作却没那么快,那么如果直接调用read,就会导致两个图像不同步。但是如果我们先通过grab把数据从设备中拿出来,在启动2个线程分别生成两个图像(retrieve可以通过参数指定通道号),那么这两个图像的同步性就得到了很好保证。

[OpenCV] cv::VideoCapture中read和grab+retrieve的区别_第1张图片

Kinect device,每一帧数据会被编码成四幅图像,这中情况下,直接调用read就更糟糕了。

[OpenCV] cv::VideoCapture中read和grab+retrieve的区别_第2张图片

图片采自:https://blog.csdn.net/qq_41925420/article/details/90710084

小结:

如果只是简单的单头摄像机,那么直接使用read或者>>运算符 即可,如果是多头摄像机,那么请使用cap+retrieve。

你可能感兴趣的:(计算机图形学)