1

我使用的CPU版本如下。

vector<float> descriptors;
cv::HOGDescriptor hog(cv::Size(24,32),cv::Size(12,12),cv::Size(4,4),cv::Size(6,6),6);
hog.compute(img, descriptors,cv::Size(8,8), cv::Size(0,0));

我的问题是如何使用 GPU 获取“描述符”?

我尝试了以下代码。(不起作用)

cv::gpu::GpuMat gpu_value, gpu_descriptors;
cv::gpu::HOGDescriptor hog_gpu(Size(24,32),Size(12,12),Size(4,4),Size(6,6),6);
gpu_value.upload(img);
hog_gpu.getDescriptors(gpu_value,cv::Size(8,8),gpu_descriptors);

如何从“gpu_descriptors”获取“描述符”?

任何人都可以帮我解决这个问题吗?非常感谢!

4

1 回答 1

1

您可以使用memeber 函数下载gpu_descriptors到 CPU 内存,如下所示:gpu::GpuMatdownload()

Mat cpu_descriptors; 
gpu_descriptors.download(cpu_descriptors);

但是,描述符在 GPU 上的存储方式可能与在 CPU 上的存储方式不同,这可能与您在上面的代码中计算的cpu_descriptors不完全相同。descriptors但是你可以试一试。

编辑 似乎没有一种方法可以将描述符vector<float>gpu::HOGDescriptor. 作为旁注,我知道您可以gpu::SURF_GPU使用它的成员函数下载特征检测器的描述符

void downloadDescriptors(const GpuMat& descriptorsGPU,
    vector<float>& descriptors);

这正是你想要的。但是,不幸的是,由于某种原因,此功能不存在于cv::gpu::HOGDescriptor. 您可以尝试弄清楚数据是如何存储在vector<float>描述符类型中的,然后尝试将其转换Matvector<float>格式。

于 2014-01-16T19:06:09.787 回答