web-dev-qa-db-ja.com

PythonでRGBAをRGBに変換する

PILを使用してRGBA画像をRGBに変換する最も簡単で最速の方法は何ですか?一部の画像からAチャネルを削除する必要があります。

これを行う簡単な方法が見つかりません。背景を考慮する必要はありません。

3
Jimbo

画像の変換メソッドを使用することをお勧めします。

import PIL.Image


rgba_image = PIL.Image.open(path_to_image)
rgb_image = image.convert('RGB')
3
Noctis Skytower

numpy配列の場合、次のソリューションを使用します。

def rgba2rgb( rgba, background=(255,255,255) ):
    row, col, ch = rgba.shape

    if ch == 3:
        return rgba

    assert ch == 4, 'RGBA image has 4 channels.'

    rgb = np.zeros( (row, col, 3), dtype='float32' )
    r, g, b, a = rgba[:,:,0], rgba[:,:,1], rgba[:,:,2], rgba[:,:,3]

    a = np.asarray( a, dtype='float32' ) / 255.0

    R, G, B = background

    rgb[:,:,0] = r * a + (1.0 - a) * R
    rgb[:,:,1] = g * a + (1.0 - a) * G
    rgb[:,:,2] = b * a + (1.0 - a) * B

    return np.asarray( rgb, dtype='uint8' )

ここで、引数rgbaは、4つのチャネルを持つタイプuint8numpy配列です。出力は、タイプuint8の3つのチャネルを持つnumpy配列です。

この配列は、ライブラリ imageioimreadおよびimsaveを使用してI/Oを簡単に実行できます。

0
Feng Wang