【发布时间】: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