Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python - RGB matrix of an image

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?

like image 938
Ojas Avatar asked Aug 03 '14 07:08

Ojas


People also ask

What is an RGB image Python?

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.


1 Answers

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 
like image 199
abarnert Avatar answered Sep 21 '22 11:09

abarnert