我使用的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_描述符’中获得‘描述符’?
有人能帮我解决这个问题吗?非常感谢!
发布于 2014-01-16 19:06:09
您可以使用gpu_descriptors memeber函数download()将gpu::GpuMat下载到CPU内存,如下所示:
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>类型的描述符中,然后尝试从Mat格式转换为vector<float>格式。
https://stackoverflow.com/questions/21168806
复制相似问题