我正在尝试用OpenCV在CUDA上做一个特征匹配算法。我正在使用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);发布于 2018-01-19 18:16:57
问题与内存复制的方向有关。您正在调用upload而不是download函数来将描述符从设备复制到主机。下面这行代码是罪魁祸首:
descriptors.upload(desc_cpu);将其替换为:
descriptors.download(desc_cpu);upload从主机拷贝到设备,而download从设备拷贝到主机。
我已经在Ubuntu14.04上用CUDA8编译的OpenCV 3.4测试和验证了这个例子。
https://stackoverflow.com/questions/48336782
复制相似问题