【问题标题】:Cuda ORB Descriptors OpencvCuda ORB 描述符 Opencv
【发布时间】:2018-06-28 10:33:16
【问题描述】:

我正在尝试在 CUDA 上使用 OpenCV 制作特征匹配算法。 我正在使用 ORB 功能。 我遇到的主要问题是我能够很好地计算 ORB 关键点,但描述符始终为空。我尝试了所有方法,但没有成功。我尝试使用最新版本的 opencv (3.4.0) 和 3.2.0 版本。 这是我的代码的简化版本:

cv::Ptr<cv::cuda::ORB> orb_gpu = cv::cuda::ORB::create(5000);
std::vector<cv::KeyPoint> keypoints;
cv::cuda::GpuMat descriptors;
cv::cuda::GpuMat img_gpu(curr_frame);
orb_gpu->detect(img_gpu, keypoints); 
orb_gpu->compute(img_gpu, keypoints, descriptors);
cv::Mat desc_cpu;
descriptors.upload(desc_cpu);

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    问题在于内存复制的方向。您正在调用 upload 而不是 download 函数将描述符从设备复制到主机。以下行是罪魁祸首:

    descriptors.upload(desc_cpu);
    

    替换为:

    descriptors.download(desc_cpu);
    

    upload 从主机复制到设备,而download 从设备复制到主机。

    我已经在 Ubuntu 14.04 上使用 CUDA 8 编译的 OpenCV 3.4 测试并验证了该示例。

    【讨论】:

    • @Andrea... 如果它解决了您的问题,您可以考虑接受答案,以便将问题标记为已解决:)
    猜你喜欢
    • 2012-07-18
    • 2013-01-01
    • 2014-05-24
    • 2017-10-19
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2010-10-27
    • 2016-02-10
    相关资源
    最近更新 更多