【问题标题】:How to use gpu::pyrdown in opencv?如何在 opencv 中使用 gpu::pyrdown?
【发布时间】:2016-05-27 21:20:35
【问题描述】:

我发现由于某种奇怪的原因,使用 pyrDown 和 pyrUp 会使我的 DownUp 充满零。但是,当我在 cpu 上正常执行此操作时,结果非常好。

注意:如果这很重要,我在 jetson tk1 上使用 opencv4tegra。

for (int i = 0; i < Pyramid_Size; i++) {
  cv::gpu::pyrDown(DownUp, DownUp);
}

for (int i = 0; i < Pyramid_Size; i++){
  cv::gpu::pyrUp(DownUp, DownUp);
}

有人知道为什么会这样吗?

编辑:

DownUp.upload(Input);

GpuMat buffer;
DownUp.copyTo(buffer);

for (int i = 0; i < Pyramid_Size; i++, DownUp.copyTo(buffer)) {
  cv::gpu::pyrDown(buffer, DownUp);
}

for (int i = 0; i < Pyramid_Size; i++, DownUp.copyTo(buffer)){
  cv::gpu::pyrUp(buffer, DownUp);
  GpuMat a = GpuMat(DownUp.size(), CV_32F);
  a.setTo(20.0f);
  cv::gpu::add(DownUp, a, DownUp);
}

这现在可以在我的代码中使用,但它比 cpu 版本慢得多。这个 gpu 版本总共需要大约 1.6-2 秒来运行,cpu 需要 0.1 秒。

我还注意到将数据从主机发送到设备所需的时间比在 cpu 上简单处理所需的时间要长得多。无论如何在opencv中可以加快速度吗?我肯定做错了什么,即使是 5mp 的大图像在 cpu 上向下/向上采样也更快。

【问题讨论】:

    标签: opencv computer-vision gpu nvidia


    【解决方案1】:

    OpenCV 2.4 中的 gpu::pyrDowngpu::pyrUp 都无法就地运行。请使用单独的GpuMat 对象进行输入和输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2021-05-15
      • 2013-07-14
      • 2018-01-02
      • 2020-08-12
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多