OpenCV3:cv::cuda::Stream::enqueueUpload() 去哪儿了?

bwe*_*ber 3 c++ opencv gpu opencv3.0

在以前的 OpenCV 版本中,有一个函数Stream::enqueueUpload可以用来将数据异步上传到 GPU CudaMem(比较:如何在 OpenCV 中使用 gpu::Stream?)。但是,这个函数在 OpenCV 3 中已经不存在了。CudaMemclass 也没有了,但似乎已经被HostMemclass取代了。

谁能告诉我如何在 OpenCV 3 中执行异步上传?

jet*_*t47 5

现在可以通过void GpuMat::upload(InputArray arr, Stream& stream)方法完成:

cv::cuda::GpuMat d_mat;
cv::cuda::HostMem h_mat;
cv::cuda::Stream stream;
d_mat.upload(h_mat, stream);
Run Code Online (Sandbox Code Playgroud)

  • `cuda::HostMem` 提供静态的 `getAllocator` 方法,该方法返回 `MatAllocator` 对象。您可以使用它来使用 `cv::Mat::setDefaultAllocator` 方法覆盖 `cv::Mat` 的默认分配器。之后你可以使用 `cv::Mat` 对象代替 `cuda::HostMem`。 (3认同)
  • 1. `cv::Mat::setDefaultAllocator(NULL)` 应该回到默认分配器。 (2认同)