PILを使用してピクセルのRGBを取得する


93

PILを使用してピクセルのRGBカラーを取得することは可能ですか?私はこのコードを使用しています:

im = Image.open("image.gif")
pix = im.load()
print(pix[1,1])

ただし、出力されるのは数値(0またはまたは1)だけで、3つの数値(たとえば60,60,60、R、G、Bの場合)ではありません。機能について何かを理解していないと思います。説明が欲しいです。

どうもありがとう。

回答:


147

はい、この方法:

im = Image.open('image.gif')
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((1, 1))

print(r, g, b)
(65, 100, 137)

以前に単一の値を取得したのpix[1, 1]は、GIFピクセルがGIFカラーパレットの256の値の1つを参照するためです。

このSO投稿も参照してください:GIFとJPEGで異なるPythonとPILのピクセル値。このPILリファレンスページに は、convert()関数の詳細が含まれています。

ちなみに、コードは.jpg画像に対しては問題なく機能します。


1
これは、画像ファイルだけでなく、コンピュータ画面でも実行できますか?
Musixauce3000

1
Image.getpixel()は0ベースまたは1ベースですか?つまり、左上のピクセルは(0,0)ですか、それとも(1、1)ですか?

2
@NimaBavari 0ベースです。
ノーラン

3

GIFは、色をパレットのx可能な色の1つとして格納します。gif限定カラーパレットについてお読みください。したがって、PILはパレットの色の色情報ではなく、パレットのインデックスを提供します。

編集:タイプミスがあったブログ投稿ソリューションへのリンクを削除しました。他の答えはタイプミスなしで同じことをします。


2

画像を変換する代わりに、パレットからRGBインデックスを作成することもできます。

from PIL import Image

def chunk(seq, size, groupByList=True):
    """Returns list of lists/tuples broken up by size input"""
    func = tuple
    if groupByList:
        func = list
    return [func(seq[i:i + size]) for i in range(0, len(seq), size)]


def getPaletteInRgb(img):
    """
    Returns list of RGB tuples found in the image palette
    :type img: Image.Image
    :rtype: list[tuple]
    """
    assert img.mode == 'P', "image should be palette mode"
    pal = img.getpalette()
    colors = chunk(pal, 3, False)
    return colors

# Usage
im = Image.open("image.gif")
pal = getPalletteInRgb(im)

2

PILではimageio.imreadありませんが、興味深いかもしれません。

import imageio
im = scipy.misc.imread('um_000000.png', flatten=False, mode='RGB')
im = imageio.imread('Figure_1.png', pilmode='RGB')
print(im.shape)

与える

(480, 640, 3)

(高さ、幅、チャネル)です。したがって、位置のピクセル(x, y)

color = tuple(im[y][x])
r, g, b = color

時代遅れ

scipy.misc.imreadscipyのダウンロード1.0.0で非推奨(リマインダー、に感謝fbahrを!)


PSA:scipy.misc.imread廃止予定です!imreadはSciPy 1.0.0で廃止され、1.2.0で削除されます。imageio.imread代わりに使用してください。
fbahr

1
リマインダーをありがとう、fbahr!( -私は実際にそれを卑下に関与したgithub.com/scipy/scipy/issues/6242を 🙈)
マーティン・トーマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.