在GPU上的浮点数组上实现OpenCV函数

时间:2013-10-24 01:38:26

标签: c++ opencv gpu

我有一个32FC1格式的像素数组(32位浮点,一个通道)

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 float转换为GpuMat

我的意思是,我不希望在CPU和GPU之间发生任何内存复制。我希望OpenCV函数可以直接处理GPU上的数组。

1 个答案:

答案 0 :(得分:0)

您可以从设备指针创建GpuMat

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

GpuMat不会释放内存,您应手动拨打cudaFree