0

我有一个格式为 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 on调用该函数image_d,但该函数只接受 format 的参数"GpuMat"。有什么方法可以将GPU 上的arrayof转换为?floatGpuMat

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

4

1 回答 1

0

您可以GpuMat从设备指针中创建:

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

GpuMat不会释放内存,您应该cudaFree手动调用。

于 2013-10-24T06:38:30.790 回答