2013-10-24 98 views
0

我有格式32FC1的像素陣列(32位浮點與一個信道點)實施OpenCV函數

float * image; // my original image on the GPU 
float * image_d; 
int size = row*col*sizeof(float); 
cudaMalloc((void**)&f_d, size); 
cudaMemcpy(image_d, image, size, cudaMemcpyHostToDevice); 

現在,我想呼叫的功能gpu::GaussianBlur來自OpenCV image_d,但此功能只接受格式爲"GpuMat"的參數。有什麼辦法可以將GPU上的array轉換爲GpuMat

我的意思是,我不想在CPU和GPU之間發生任何內存複製。我希望OpenCV函數可以直接處理GPU上的陣列。

回答

0

您可以創建GpuMat形成設備指針:

const size_t step = col * sizeof(float); 
GpuMat mat(row, col, CV_32FC1, image_d, step); 

GpuMat不會釋放內存,你應該手動調用cudaFree

+0

這就是我需要的。非常感謝。順便說一句,我怎麼知道這一點?我無法在OpenCV文檔中找到它。 – BoneyardCreeker