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

我使用的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>格式。

https://stackoverflow.com/questions/21168806/

相关文章:

python - 使用OpenCV人脸检测时出错

python - 用向量作为numpy中的条目迭代矩阵的最快方法

opencv - 在Cygwin上安装Opencv

opencv - 如何找到两个二进制图像之间的旋转

opencv - OpenCV HoughLines是否使用本文:通过改进的Hough变换投票方案进

python - 如何在python中使用opencv在图像上显示轴

opencv - 检测图像中的标记以用于OpenCV中的透视变换

python - 将 h264 RTSP 流读入 p​​ython 和 opencv

opencv - 使用JavaCV开发我们需要安装什么?

python - OpenCV 3.0缺少诸如drawMatches和drawMatchesKNN的