【问题标题】:OpenCV3: where has cv::cuda::Stream::enqueueUpload() gone?OpenCV3:cv::cuda::Stream::enqueueUpload() 去了哪里?
【发布时间】:2016-07-06 09:23:36
【问题描述】:

在以前的 OpenCV 版本中,有函数 Stream::enqueueUpload 可用于将数据与 CudaMem 一起异步上传到 GPU(比较:how to use gpu::Stream in OpenCV?)。但是,这个函数在 OpenCV 3 中不再存在。CudaMem 类也消失了,但似乎已被 HostMem 类取代。

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

【问题讨论】:

    标签: c++ opencv gpu opencv3.0


    【解决方案1】:

    现在可以通过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);
    

    【讨论】:

    • 谢谢,我试试这个!
    • cuda::HostMem 提供静态getAllocator 方法,该方法返回MatAllocator 对象。您可以使用cv::Mat::setDefaultAllocator 方法使用它来覆盖cv::Mat 的默认分配器。之后,您可以使用 cv::Mat 对象而不是 cuda::HostMem
    • 1. cv::Mat::setDefaultAllocator(NULL) 应该回到默认分配器。
    • 2.是的,如果 cv::Mat 被分配为页面锁定,您可以使用 cv::cuda::GpuMat::upload(cv::Mat, cv::cuda::Stream)
    • 根据它的名字,它返回标准的 Mat 分配器,它使用cv::fastAlloc
    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2011-04-17
    • 2019-08-04
    • 2012-09-23
    相关资源
    最近更新 更多