numpy with python: convert 3d array to 2d

前端 未结 3 466
一生所求
一生所求 2020-12-03 01:23

Say that I have a color image, and naturally this will be represented by a 3-dimensional array in python, say of shape (n x m x 3) and call it img.

I want a new 2-d

相关标签:
3条回答
  • 2020-12-03 02:07

    Let's say we have an array img of size m x n x 3 to transform into an array new_img of size 3 x (m*n)

    new_img = img.reshape((img.shape[0]*img.shape[1]), img.shape[2])
    new_img = new_img.transpose()
    
    0 讨论(0)
  • 2020-12-03 02:10

    You need to use np.transpose to rearrange dimensions. Now, n x m x 3 is to be converted to 3 x (n*m), so send the last axis to the front and shift right the order of the remaining axes (0,1). Finally , reshape to have 3 rows. Thus, the implementation would be -

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

    Sample run -

    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]])
    
    0 讨论(0)
  • 2020-12-03 02:18

    If you have the scikit module installed, then you can use the rgb2grey (or rgb2gray) to make 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 讨论(0)
提交回复
热议问题