首页 > 解决方案 > 使用 OpenCV 捕获图像,而不是视频

问题描述

我正在使用 OpenCV4 从相机中读取数据。类似于网络摄像头。效果很好,代码有点像这样:

cv::VideoCapture cap(0);
cap.set(cv::CAP_PROP_FRAME_WIDTH , 1600);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1200);
while (true)
{
    cv::Mat mat;

    // wait for some external event here so I know it is time to take a picture...

    cap >> mat;
    process_image(mat);
}

问题是,这提供了许多视频帧,而不是单个图像。这很重要,因为在我的情况下,我不想也不需要处理 30 FPS。我实际上有特定的物理事件触发在某些时候从相机读取图像。因为 OpenCV 期望调用者想要视频——考虑到这个类被调用,这并不奇怪cv::VideoCapture——它已经缓冲了很多秒的帧。

我在图像中看到的总是几秒钟前的。

所以我的问题:

我正在考虑调查的另一个选项是直接使用 V4L2 而不是 OpenCV。这会让我拍单张照片还是只像 OpenCV 这样流式传输视频?

标签: c++linuxopencvwebcamv4l2

解决方案


推荐阅读