Numpy with python: convert 3d array to 2d

Let's say that I have a color image, and, of course, this will be represented by a three-dimensional array in python, for example, about the form (nxmx 3) and call it img.

I want a new 2nd array, call it “narray” to have the form (3, nxm), so each row of this array contains a “flattened” version of the channels R, G and B, respectively. Moreover, it should have the property that I can easily restore back from any of the original channel with something like

narray[0,].reshape(img.shape[0:2]) #so this should reconstruct back the R channel. 

The question is, how can I build "narray" from "img"? Simple img.reshape (3, -1) does not work, since the order of the elements is undesirable for me.

thanks

+11
python arrays numpy image-processing computer-vision
source share
3 answers

You need to use np.transpose to resize. Now nxmx 3 needs to be converted to 3 x (n*m) , so send the last axis to the foreground and shift the order of the remaining axes to the right (0,1) . Finally, change the shape to have lines 3 . So the implementation will be -

 img.transpose(2,0,1).reshape(3,-1) 

Run Example -

 In [16]: img Out[16]: array([[[155, 33, 129], [161, 218, 6]], [[215, 142, 235], [143, 249, 164]], [[221, 71, 229], [ 56, 91, 120]], [[236, 4, 177], [171, 105, 40]]]) In [17]: img.transpose(2,0,1).reshape(3,-1) Out[17]: array([[155, 161, 215, 143, 221, 56, 236, 171], [ 33, 218, 142, 249, 71, 91, 4, 105], [129, 6, 235, 164, 229, 120, 177, 40]]) 
+16
source share

Suppose we have an img array of size mxnx 3 to convert to a new_img array of size 3 x (m*n)

 new_img = img.reshape((img.shape[0]*img.shape[1]), img.shape[2]) new_img = new_img.transpose() 
+1
source share

If you have scikit installed, then you can use rgb2grey (or rgb2gray) to take a photo from color to gray (from 3D to 2D)

 from skimage import io, color lina_color = io.imread(path+img) lina_gray = color.rgb2gray(lina_color) In [33]: lina_color.shape Out[33]: (1920, 1280, 3) In [34]: lina_gray.shape Out[34]: (1920, 1280) 
0
source share

All Articles