访问gpu :: mat中的像素

时间:2014-04-29 18:16:05

标签: opencv gpu

我想知道在使用OpenCV GPU时如何访问像素信息。我目前正在将gpu :: mat信息下载到mat变量,但它太慢了。 有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

您可以访问内核中的数据。

对于(行,列)行和列号, 通道号ch <3的像素的值为:

uint8_t val = gpumat.data[ (row*gpumat.step) + col*gpumat.channels() + ch];

因此,假设您在名为src的GpuMat上存储了BGR输入图像,并且您想  将每个像素值分配给称为dst(也称为GpuMat)的目标图像。 您可以调用内核

    kernel_assign_pixel<<<gridDim, blockDim>>>
(src.data, dst.data, src.rows, src.cols, src.step, dst.step, src.channels());

按以下方式定义

    __global__ void kernel_assign_pixel
(uint8_t* src, uint8_t* dst, int MaxRows, int MaxCols, int iStep, int oStep, int MaxC)
        {

        unsigned int row = blockIdx.x * blockDim.x + threadIdx.x; //Row number
        unsigned int col = blockIdx.y * blockDim.y + threadIdx.y; //Column number
        unsigned int ch = blockIdx.z * blockDim.z + threadIdx.z; //Channel number

            if (row<MaxRows && col<MaxCols && ch < MaxC)
            {
                int tidIn = row * iStep + col * MaxC  + ch;
                int tidOut = row * oStep + col * MaxC + ch;

                dst[tidOut]=src[tidIn];
            }
        }