2013-10-24 69 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