我使用的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”中获取“descriptor”?
谁能帮我解决这个问题?非常感谢!
最佳答案
您可以使用gpu_descriptors
memeber函数gpu::GpuMat
将download()
下载到CPU内存中,如下所示:
Mat cpu_descriptors;
gpu_descriptors.download(cpu_descriptors);
但是,描述符在GPU上的存储方式与在CPU上的存储方式可能不同,也就是说
cpu_descriptors
可能与上面代码中计算出的descriptors
不完全相同。但是您可以尝试一下。编辑
似乎没有一种将
vector<float>
的描述符以gpu::HOGDescriptor
格式下载到CPU内存的方法。附带说明,我知道您可以使用它的成员函数下载 gpu::SURF_GPU
特征检测器的描述符void downloadDescriptors(const GpuMat& descriptorsGPU,
vector<float>& descriptors);
这正是您想要的。但是,不幸的是,由于某种原因,
cv::gpu::HOGDescriptor
不存在此功能。您可以尝试找出数据如何以vector<float>
类型的描述符存储,然后尝试从Mat
转换为vector<float>
格式。
关于opencv - 如何从gpuHog获取描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168806/