तकिया का उपयोग करना (जो कि पायथन 3. एक्स के साथ-साथ पायथन 2.7+ के साथ काम करता है), आप निम्न कार्य कर सकते हैं:
from PIL import Image
im = Image.open('image.jpg', 'r')
width, height = im.size
pixel_values = list(im.getdata())
अब आपके पास सभी पिक्सेल मान हैं। यदि यह RGB है या किसी अन्य मोड द्वारा पढ़ा जा सकता है im.mode
। तब आप पिक्सेल प्राप्त कर सकते हैं (x, y)
:
pixel_values[width*y+x]
वैकल्पिक रूप से, आप Numpy का उपयोग कर सकते हैं और सरणी को फिर से खोल सकते हैं:
>>> pixel_values = numpy.array(pixel_values).reshape((width, height, 3))
>>> x, y = 0, 1
>>> pixel_values[x][y]
[ 18 18 12]
समाधान का उपयोग करने के लिए एक पूर्ण, सरल है
# Third party modules
import numpy
from PIL import Image
def get_image(image_path):
"""Get a numpy array of an image so that one can access values[x][y]."""
image = Image.open(image_path, "r")
width, height = image.size
pixel_values = list(image.getdata())
if image.mode == "RGB":
channels = 3
elif image.mode == "L":
channels = 1
else:
print("Unknown mode: %s" % image.mode)
return None
pixel_values = numpy.array(pixel_values).reshape((width, height, channels))
return pixel_values
image = get_image("gradient.png")
print(image[0])
print(image.shape)
कोड का परीक्षण धुआँ
आप चौड़ाई / ऊँचाई / चैनल के क्रम के बारे में अनिश्चित हो सकते हैं। इस कारण से मैंने यह ग्रेडिएंट बनाया है:
छवि की चौड़ाई 100px और ऊंचाई 26px है। इसका रंग ढाल #ffaa00
(पीला) से #ffffff
(सफ़ेद) होता है। आउटपुट है:
[[255 172 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 4]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 5]]
(100, 26, 3)
ध्यान देने योग्य बातें:
- आकार है (चौड़ाई, ऊंचाई, चैनल)
image[0]
, इसलिए पहली पंक्ति, एक ही रंग के 26 ट्रिपल है