পিআইএল ব্যবহার করে পিক্সেলের আরজিবি পান


96

পিআইএল ব্যবহার করে কোনও পিক্সেলের আরজিবি রঙ পাওয়া সম্ভব? আমি এই কোডটি ব্যবহার করছি:

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

তবে এটি কেবল একটি সংখ্যা (যেমন 0বা 1) এবং তিনটি সংখ্যা নয় (যেমন 60,60,60আর, জি, বি এর জন্য) আউটপুট দেয় । আমার ধারণা আমি ফাংশনটি সম্পর্কে কিছু বুঝতে পারছি না। আমি কিছু ব্যাখ্যা পছন্দ করি।

অনেক ধন্যবাদ.

উত্তর:


150

হ্যাঁ, এইভাবে:

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]তা হ'ল জিআইএফ পিক্সেলগুলি জিআইএফ রঙ প্যালেটের 256 টির মধ্যে একটিতে উল্লেখ করে।

এই এসও পোস্টটিও দেখুন: পাইথন এবং পিআইএল পিক্সেল মানগুলি জিআইএফ এবং জেপিইগির জন্য পৃথক এবং এই পিআইএল রেফারেন্স পৃষ্ঠাটিতেconvert() ফাংশন সম্পর্কিত আরও তথ্য রয়েছে ।

যাইহোক, আপনার কোড .jpgচিত্রগুলির জন্য ঠিক কাজ করবে ।


4
এটি কেবল কোনও চিত্র ফাইল নয়, কম্পিউটারের পর্দার জন্য করা যেতে পারে?
Musixauce3000

4
ইমেজ.গেটপিক্সেল () 0-ভিত্তিক বা 1-ভিত্তিক? মানে, উপরের-বাম-সর্বাধিক পিক্সেলটি (0,0) বা এটি (1, 1)?

4
@ নিমবাবাড়ি এটি 0-ভিত্তিক।
নোলান

3

জিআইএফগুলি প্যালেটে সম্ভাব্য রঙের এক নম্বর হিসাবে রঙ সঞ্চয় করে। জিআইএফ সীমিত রঙ প্যালেট সম্পর্কে পড়ুন । সুতরাং পিআইএল আপনাকে সেই প্যালেট রঙের রঙিন তথ্যের চেয়ে প্যালেট সূচক দিচ্ছে।

সম্পাদনা: একটি ব্লগ পোস্ট সমাধানের লিঙ্ক সরানো হয়েছে যাতে টাইপ ছিল। অন্যান্য উত্তর টাইপো ছাড়াই একই কাজ করে।


2

চিত্র রূপান্তর করার বিকল্প হ'ল প্যালেট থেকে আরজিবি সূচক তৈরি করা।

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

পিআইএল নয়, তবে 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 !)


পিএসএ: scipy.misc.imreadঅবহেলিত! imreadSciPy 1.0.0 এ অবমূল্যায়িত হয়েছে এবং এটি 1.2.0 এ সরানো হবে। imageio.imreadপরিবর্তে ব্যবহার করুন।
এফবিআর

4
অনুস্মারকটির জন্য ধন্যবাদ, ফাহার! (আমি প্রকৃতপক্ষে এটি হ্রাস করার সাথে জড়িত ছিলাম - github.com/scipy/scipy/issues/6242 🙈 )
মার্টিন থোমা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.