I want to convert an image to 2D array with 5 columns where each row is of the form [r, g, b, x, y]
. x, y is the position of the pixel and r,g,b are the pixel values. (I will be using this array as input to a machine learning model). Is there a more efficient implementation than this in python?
import Image
import numpy as np
im = Image.open("farm.jpg")
col,row = im.size
data = np.zeros((row*col, 5))
pixels = im.load()
for i in range(row):
for j in range(col):
r,g,b = pixels[i,j]
data[i*col + j,:] = r,g,b,i,j
imread() function is used to load the image and It also reads the given image (PIL image) in the NumPy array format. Then we need to convert the image color from BGR to RGB. imwrite() is used to save the image in the file.
We can insert elements into a 2 D array using the insert() function that specifies the element' index number and location to be inserted. # Write a program to insert the element into the 2D (two dimensional) array of Python. from array import * # import all package related to the array.
I had to write this recently and ended up with
indices = np.dstack(np.indices(im.shape[:2]))
data = np.concatenate((im, indices), axis=-1)
Where im
is a numpy array. You are probably better off reading the images straight into numpy arrays with
from scipy.misc import imread
im = imread("farm.jpg")
Or, better still if you have Scikit Image installed
from skimage.io import imread
im = imread("farm.jpg")
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