1
我发现使用pyrDown和pyrUp会让我的DownUp由于某种奇怪的原因而充满零。但是,当我通常在CPU上执行此操作时,结果非常好。如何在opencv中使用gpu :: pyrdown?
注意:我在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上快速上下采样。