1

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 チャンネルを取得することです。どうすればよいですか?

4

1 に答える 1

1

これは最終的に画像の保存方法に依存しますが、この状況では構造体を利用します。例えば:

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を参照してください。

于 2012-11-21T20:33:23.807 に答える