为什么在使用 VideoCapture 从网络摄像头读取图像时使用 gpu

Why is gpu used when reading image from webcam using VideoCapture

当我使用 cv::VideoCapture 从网络摄像头读取时,我的 gpu 显示 17% 的使用率,我不知道为什么。我一直认为这是纯粹的 cpu 事情。

我的系统是win10,opencv 4.0。我尝试使用和不使用 cuda 进行编译,结果都一样。

这是我闲置时的 gpu 使用情况:

这是我从网络摄像头读取时的 gpu 使用情况:

这是代码:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    VideoCapture cap(0);
    Mat img;
    while (true)
    {
        cap.read(img);
    }
}

谢谢!

在这里回答我自己的问题。感谢大家的帮助,让我意识到自己对视频拍摄的误解。

VideoCapture 的默认后端是 cv::CAP_ANY,这意味着自动检测,在我的例子中使用 cv::CAP_MSMF。将后端指定为 cv::CAP_DSHOW 后,不再使用 GPU。修改后的代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    VideoCapture cap(0, CAP_DSHOW);// HERE
    Mat img;
    while (true)
    {
        cap.read(img);
    }
}