如何从gpuHog获取描述符?

时间:2014-01-16 17:32:44

标签: opencv feature-descriptor

我使用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'中获取'描述符'?

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

1 个答案:

答案 0 :(得分:0)

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

Mat cpu_descriptors; 
gpu_descriptors.download(cpu_descriptors);

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

修改 似乎没有一种方法可以将vector<float>格式的描述符下载到CPU内存gpu::HOGDescriptor。作为附注,我知道您可以使用它的成员函数下载gpu::SURF_GPU特征检测器的描述符

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

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