opencv - 如何在 opencv 中使用 gpu::pyrdown?

标签 opencv computer-vision gpu nvidia

我发现由于某些奇怪的原因,使用 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 2.4 中的 gpu::pyrDowngpu::pyrUp 都不能原地运行。请使用单独的 GpuMat 对象进行输入和输出。

关于opencv - 如何在 opencv 中使用 gpu::pyrdown?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35435221/

相关文章:

c++ - 检测器、提取器和匹配器的分类

opencv - 在单个平面上计算多个标记的单应性

tensorflow - 在恢复的对象: (root). Optimizer.iter中找不到检查点中的值

c - 在 STM32 - C 上处理图像

Cuda全局内存加载和存储

tensorflow - GPU -> CPU Memcpy 在 tensorflow word2vec 中失败 gpu 发生

android - 使用Android二进制文件使用openCV Matrix裁剪图像

algorithm - 在桌面截图中查找 Logo

php - 使用 php shell_exec() 执行命令行以启动服务器上的摄像头

python - Tensorflow GPU内存报错try-except not catching the error