将 (M, N, 3) numpy 数组重塑为 (M*N, 3)

Dee*_*Bee 1 python arrays numpy

假设我有一个由 (M, N, 3) numpy 数组表示的 RGB(或 HSV)图像,其中每个维度([x, y, 0][x, y, 1])表示特定像素处的颜色通道值。我想将数组重塑为 (M*N, 3),其中颜色通道组合 ( [R1, G1, B1], [R2, G2, B2]...) 为平面列表(在这种情况下这是正确的术语吗?)。我知道必须使用 reshape 函数,但我很难理解如何使用该函数。任何帮助表示赞赏。

编辑:这是我希望发生的事情的一个例子。

输入:代表图像的 (640 x 640 x 3) 数组,其中[40, 40, 1]是特定像素的 G 值。我想获取所有 3 个颜色通道并将它们组合到以下输出中。

输出:([R, G, B], [R, G, B], [R, G, B]...)

War*_*ser 5

如果img是您的数组,则可以使用img.reshape(-1, 3).

例如,

In [50]: img.shape
Out[50]: (5, 2, 3)

In [51]: img
Out[51]: 
array([[[2, 0, 4],
        [1, 4, 3]],

       [[2, 1, 4],
        [3, 2, 2]],

       [[2, 4, 1],
        [4, 0, 2]],

       [[1, 4, 2],
        [3, 2, 2]],

       [[3, 2, 1],
        [2, 1, 0]]])


In [53]: x = img.reshape(-1, 3)

In [54]: x.shape
Out[54]: (10, 3)

In [55]: x
Out[55]: 
array([[2, 0, 4],
       [1, 4, 3],
       [2, 1, 4],
       [3, 2, 2],
       [2, 4, 1],
       [4, 0, 2],
       [1, 4, 2],
       [3, 2, 2],
       [3, 2, 1],
       [2, 1, 0]])
Run Code Online (Sandbox Code Playgroud)