【问题标题】:Why is gpu used when reading image from webcam using VideoCapture [closed]为什么在使用 VideoCapture 从网络摄像头读取图像时使用 gpu [关闭]
【发布时间】:2019-12-15 03:08:10
【问题描述】:

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

我的系统是带有opencv 4.0的Win10。我尝试编译有和没有 cuda,都结束了。

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

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

这是代码:

#include <opencv2/opencv.hpp>

using namespace cv;

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

谢谢!

【问题讨论】:

  • 你有什么理由认为它会是 CPU 的事情?
  • OpenCV 的 Video Capture 类是围绕多个 3rd 方后端构建的,其中一些使用 GPU 加速进行编码/解码。
  • 因为 GPU(“图形处理单元”)比 CPU 更擅长处理图形。是的,大多数视频传感器输出需要大量进一步处理才能被人类解释。
  • @ThomasJager 因为只使用了“3D”块,而“copy”、“encode”和“decode”显示没有使用,这通常意味着没有任何内容被复制到 gpu 内存并且没有解码/编码执行。我想知道gpu是否可以在不先复制到gpu内存的情况下处理任何东西。
  • @TheBarrometer 如屏幕截图所示,“encode”和“decode”块没有使用,所以我不确定是不是这样。

标签: c++ opencv gpu video-capture


【解决方案1】:

在这里回答我自己的问题。感谢您的所有帮助,让我意识到我在视频捕获方面存在误解。

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);
    }
}

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2017-02-11
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多