我想知道如何在使用OpenCV GPU时访问像素信息。我目前正在将gpu::mat信息下载到mat变量中,但速度太慢了。有人知道怎么做吗?
您可以访问内核内部的数据。
对于(row,col(行和列编号,通道编号ch<3将是:
uint8_t val = gpumat.data[ (row*gpumat.step) + col*gpumat.channels() + ch];
假设你有一个BGR输入图像存储在一个名为src的GpuMat上,你想将每个像素值分配给称为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];
}
}