bestsource

PIL을 사용하여 픽셀의 RGB 가져오기

bestsource 2023. 10. 26. 21:16
반응형

PIL을 사용하여 픽셀의 RGB 가져오기

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

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

그러나 숫자(예: 숫자)만 출력).0아니면13개의 숫자가 아닌 경우(예:60,60,60R,G,B)의 경우.제가 그 기능에 대해 뭔가를 이해하지 못하고 있는 것 같습니다.설명이 필요합니다.

정말 감사해요.

예, 이쪽입니다.

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 Reference 페이지에는 다음에 대한 더 많은 정보가 포함되어 있습니다.convert()기능.

그건 그렇고, 당신의 코드는 잘 작동할 것입니다..jpg이미지들.

numpy 포함:

im = Image.open('image.gif')
im_matrix = np.array(im)
print(im_matrix[0][0])

픽셀 위치의 RGB 벡터 제공 (0,0)

GIF는 색상을 팔레트에 가능한 x개의 색상 중 하나로 저장합니다.gif 리미티드 컬러 팔레트에 대해 읽어보세요.그래서 PIL은 팔레트 색상의 색상 정보가 아닌 팔레트 인덱스를 알려주고 있습니다.

편집: 오타가 있었던 블로그 게시물 솔루션에 대한 링크를 제거했습니다.오타 없이도 다른 대답들도 같은 일을 합니다.

이미지를 변환하는 대안은 팔레트에서 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)

PIL은 아니지만 그래도 흥미로울 수 있습니다.

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 SciPy 1.0.0에서 더 이상 사용되지 않습니다. (알려주셔서 감사합니다, fbahr!)

언급URL : https://stackoverflow.com/questions/11064786/get-pixels-rgb-using-pil

반응형