2012-06-16 15 views
62

का उपयोग कर पिक्सेल के आरजीबी प्राप्त करें क्या पीआईएल का उपयोग कर पिक्सेल के आरजीबी रंग को प्राप्त करना संभव है? मैं इस कोड का उपयोग कर रहा:पीआईएल

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

हालांकि, यह केवल एक संख्या (उदा 0 या 1) और नहीं तीन नंबर आउटपुट (जैसे आर के लिए 60,60,60, जी, बी)। मुझे लगता है कि मैं समारोह के बारे में कुछ समझ नहीं रहा हूँ। मुझे कुछ स्पष्टीकरण पसंद आएगा।

बहुत बहुत धन्यवाद।

उत्तर

96

हाँ, इस तरह से:

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 पोस्ट भी देखें: Python and PIL pixel values different for GIF and JPEG और यह PIL Reference pageconvert() फ़ंक्शन पर अधिक जानकारी शामिल है।

वैसे, आपका कोड .jpg छवियों के लिए ठीक काम करेगा।

+0

क्या यह कंप्यूटर स्क्रीन के लिए किया जा सकता है, न केवल एक छवि फ़ाइल? – Musixauce3000

+0

Image.getpixel() 0-आधारित या 1-आधारित है? मेरा मतलब है, ऊपरी-बाएं-सबसे पिक्सेल (0,0) है या यह (1, 1) है? –

+0

@ निमाबावरी यह 0-आधारित है। – Nolan

2

जीआईएफ स्टोर पैलेट में संभव रंगों की एक्स संख्या में से एक के रूप में रंगों को रंग देता है। gif limited color palette के बारे में पढ़ें। तो पीआईएल आपको उस पैलेट रंग की रंगीन जानकारी के बजाय पैलेट इंडेक्स दे रहा है।

संपादित करें: एक ब्लॉग पोस्ट समाधान है कि एक टाइपो था निकाला गया लिंक। अन्य उत्तर टाइपो के बिना एक ही काम करते हैं।

1

छवि को बदलने का एक विकल्प पैलेट से आरजीबी इंडेक्स बनाना है।

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

नहीं जनहित याचिका, लेकिन scipy.misc.imread अभी भी दिलचस्प हो सकता है:

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

देता

(480, 640, 3) 

तो यह (ऊंचाई, चौड़ाई, चैनल) है। तो स्थिति (x, y) पर पिक्सेल

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