将彩色图像转换为单行numpy数组(r1,g1,b1; r2,g2,b2; ...)

时间:2015-01-20 14:36:51

标签: python arrays numpy

有人能告诉我如何将彩色图像转换为(r1, g1, b1; r2, g2, b2; ...)的单行NumPy数组吗?

到目前为止,我已经将我的图像加载到我的图像中,尺寸为512x512px到(512,512,3)numpy数组。现在我想将其转换为(1 x 786432)数组。

2 个答案:

答案 0 :(得分:1)

ndarray.flatten()应该这样做:

In [15]: image = np.arange(4*4*3).reshape((4, 4, 3))

In [16]: image
Out[16]: 
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [21, 22, 23]],

       [[24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]],

       [[36, 37, 38],
        [39, 40, 41],
        [42, 43, 44],
        [45, 46, 47]]])

In [17]: image.flatten()
Out[17]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
       34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47])

答案 1 :(得分:1)

要将所有内容都推送到一行,您可以使用reshape

array.reshape(1, -1)

这将返回形状为(1, 786432)的数组的2D视图,单行。该方法默认将数组视为C顺序,因此较高的维度是"展平"首先(在这种情况下你想要的)。

或者,你可以使用ravel来获得一个平面阵列:

array.ravel()

这个区别在于返回的数组视图是1D:shape (786432,)