Taking an image as input, how can I get the rgb matrix corresponding to it? I checked out the numpy.asarray function. Does that give me the rgb matrix or some other matrix?
A simple way to describe each pixel is using a combination of three colors, namely Red, Green, Blue. This is what we call an RGB image. In an RGB image, each pixel is represented by three 8 bit numbers associated to the values for Red, Green, Blue respectively.
Note that this answer is outdated as of 2018; scipy
has deprecated imread
, and you should switch to imageio.imread
. See this transition doc about differences between the two. The code below should work with no changes if you just import the new library in place of the old, but I haven’t tested it.
The simplest answer is to use the NumPy and SciPy wrappers around PIL. There's a great tutorial, but the basic idea is:
from scipy import misc arr = misc.imread('lena.png') # 640x480x3 array arr[20, 30] # 3-vector for a pixel arr[20, 30, 1] # green value for a pixel
For a 640x480 RGB image, this will give you a 640x480x3 array of uint8
.
Or you can just open the file with PIL (or, rather, Pillow; if you're still using PIL, this may not work, or may be very slow) and pass it straight to NumPy:
import numpy as np from PIL import Image img = Image.open('lena.png') arr = np.array(img) # 640x480x4 array arr[20, 30] # 4-vector, just like above
This will give you a 640x480x4 array of type uint8
(the 4th is alpha; PIL always loads PNG files as RGBA, even if they have no transparency; see img.getbands()
if you're every unsure).
If you don't want to use NumPy at all, PIL's own PixelArray
type is a more limited array:
arr = img.load() arr[20, 30] # tuple of 4 ints
This gives you a 640x480 PixelAccess
array of RGBA 4-tuples.
Or you can just call getpixel
on the image:
img.getpixel(20, 30) # tuple of 4 ints
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With