我使用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'中获取'描述符'?
任何人都可以帮我解决这个问题吗?非常感谢!
答案 0 :(得分:0)
您可以使用gpu_descriptors
memeber函数gpu::GpuMat
将download()
下载到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>
格式。