2014-01-16 176 views
1

我用CPU版本如下。如何從gpuHog獲取描述符?

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

您可以下載gpu_descriptors使用gpu::GpuMat memeber功能download() CPU內存,如下所示:

Mat cpu_descriptors; 
gpu_descriptors.download(cpu_descriptors); 

然而,描述符可以被不同的GPU比CPU存儲,這是cpu_descriptors可能不完全的與上面代碼中計算的descriptors相同。但你可以試試看。

編輯 似乎有不被下載描述符CPU內存vector<float>格式gpu::HOGDescriptor的方法。作爲一個方面說明,我知道,你可以下載描述符gpu::SURF_GPU特徵檢測器,使用它的成員函數

void downloadDescriptors(const GpuMat& descriptorsGPU, 
    vector<float>& descriptors); 

這是你想要什麼。但不幸的是,由於某種原因,該功能不存在cv::gpu::HOGDescriptor。您可以嘗試確定數據如何存儲在vector<float>類型的描述符中,然後嘗試將Mat轉換爲vector<float>格式。

+0

嗨亞歷克斯,是否有可能將cpu_descriptors轉換爲矢量? – user3203629

+0

@ user3203629我編輯了我的答案 – Alexey

+0

cv :: gpu :: HOGDescriptor hog_gpu(Size(24,32),Size(12,12),Size(4,4),Size(6,6),6);在這裏似乎有些問題。你能幫忙嗎?謝謝 – user3203629