我有一个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上的数组。
答案 0 :(得分:0)
您可以从设备指针创建GpuMat
:
const size_t step = col * sizeof(float);
GpuMat mat(row, col, CV_32FC1, image_d, step);
此GpuMat
不会释放内存,您应手动拨打cudaFree
。