c - 如何读取 C 中图像的 RGB channel ?

标签 c cuda

我正在使用 pycuda 来计算图像像素的强度。为此,我已将图像发送到 GPU,如下所示。

 img = np.float32(np.array(img.imread('my_image.jpg')))
 img_gpu = gpuarray.to_gpu(img)

然后,在内核中(当然是用 c 编写的),我想按如下方式获取 RGB 值(伪代码)。

__global__ void get_intensities(float* img, float* intensities) {
    intensities[globalIndex] = R(x, y) + G(x, y) + B(x, y)
}

我现在的大问题是在 C 中获取 RGB channel 。我该怎么做?

最佳答案

虽然这最终取决于图像的存储方式,但在这种情况下我会利用结构。例如:

image = np.uint8(np.array(img.imread('my_image.jpg')))
img_gpu = gpuarray.to_gpu(image)

__global__ void intensity(uchar3* img, int* intensities)
{
    ...
    intensities[globalIndex] = img[globalIndex].x + img[globalIndex].y + img[globalIndex].z;
    ...
}

参见 http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#built-in-vector-types

关于c - 如何读取 C 中图像的 RGB channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421220/

相关文章:

c++ - 手动添加 vector 异常处理程序

c - getche 按 Enter 后清除屏幕

cuda - CUDA 编译器如何知道扭曲的发散行为?

java - 是否有任何支持 CUDA 的 JVM 实现?

c - 在 C 中制作没有框架的 GUI

c - 如何用指针变量存储变量

c++ - 分发 DbgHelp.DLL

c++ - GPU 内存访问和使用 (CUDA)

c++ - 训练一个非常大的神经网络

cuda - Volta 中每线程程序计数器的寄存器消耗