【问题标题】:Implementing OpenCV functions on an array of float on the GPU在 GPU 上的浮点数组上实现 OpenCV 函数
【发布时间】:2013-10-24 01:38:26
【问题描述】:

我有一个格式为 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);

现在,我想在image_d 上从OpenCV 调用函数gpu::GaussianBlur,但这个函数只接受"GpuMat" 格式的参数。有什么方法可以将 GPU 上的 floatarray 转换为 GpuMat

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

【问题讨论】:

    标签: c++ opencv gpu


    【解决方案1】:

    您可以通过设备指针创建GpuMat

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

    这个GpuMat不会释放内存,你应该手动调用cudaFree

    【讨论】:

    • 这就是我需要的。非常感谢。顺便说一句,我怎么知道这个?我在 OpenCV 文档中找不到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2011-05-09
    • 2023-03-09
    • 2011-07-04
    • 2020-07-26
    相关资源
    最近更新 更多