ProgramingTip

PIL을 사용하여 픽셀의 RGB 제공

bestdevel 2020. 10. 12. 07:52
반응형

PIL을 사용하여 픽셀의 RGB 제공


PIL을 사용하여 픽셀의 RGB 색상을 사용할 수 있습니까? 이 코드를 사용하고 있습니다.

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

그러나 3 개의 숫자 (예 : R, G, B)가 아닌 숫자 (예 : 0또는 1) 만 출력합니다 60,60,60. 기능에 대해 이해하지 못하는 것입니다. 나는 약간의 설명을 좋아한다.

감사합니다.


예, 이렇게 :

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 개 값을 참조하기 때문입니다.

이 SO 게시물을 참조하십시오 : GIF 및 JPEG에 대해 다른 Python 및 PIL 픽셀 값 및이 PIL 참조 페이지 에는 convert()함수 에 대한 자세한 정보가 포함되어 있습니다 .

그건 그렇고, 당신의 코드는 .jpg이미지에 대해 잘 작동 합니다.


GIF는 색상을 사용할 수있는 x 개의 색상 중 하나로 저장합니다. gif 제한 색상

에 대한 설명 . PIL은 색상의 색상 정보가 아닌 색인을 제공합니다.

편집 : 오타가있는 블로그 게시물 솔루션에 대한 링크를 제거했습니다. 다른 답변은 오타없이 동일한 작업을 수행합니다.


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.imread한다 1.0.0 SciPy에서 사용하지 않는 (감사 알림 에 대한 fbahr !)


이미지 변환에 대한 대안은 현장에서 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)

참고 URL : https://stackoverflow.com/questions/11064786/get-pixels-rgb-using-pil

반응형