opencv - 如何从gpuHog获取描述符?

标签 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”中获取“descriptor”?

谁能帮我解决这个问题?非常感谢!

最佳答案

您可以使用gpu_descriptors memeber函数gpu::GpuMatdownload()下载到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/

相关文章:

c++ - 使用 LineIterator 访问沿线的像素强度值

opencv - 如何从 DrawMatches() 方法返回的 Mat 对象中分离查询和训练图像

c++ - 计算两个描述符之间的距离

qt - 如何访问在 QtCreator Designer 中创建的 QLabel?

c++ - fatal error : opencv2/nonfree/nonfree. hpp:没有这样的文件或目录

matlab - 如何估计/确定深度图像点的表面法线和切平面?

opencv - 如何检测 OpenCV 中的已知对象?

python - 为什么重新计算 ORB 描述符比从磁盘加载它更快?

opencv - 什么是暴力描述符匹配器?