2

画像のデータからnumpy配列を作成しました。numpy配列を1次元配列に変換したいと思います。

import numpy as np
import matplotlib.image as img

if __name__ == '__main__':

  my_image = img.imread("zebra.jpg")[:,:,0]
  width, height = my_image.shape
  my_image = np.array(my_image)
  img_buffer = my_image.copy()
  img_buffer = img_buffer.reshape(width * height)
  print str(img_buffer.shape)

128x128の画像はこちらです。

ここに画像の説明を入力してください

ただし、このプログラムは(128、128)を出力します。img_bufferでも一次元配列になりたいです。この配列の形状を変更するにはどうすればよいですか?なぜnumpyは実際に配列を1次元配列に再形成しないのですか?

4

2 に答える 2

4

.reshape所定の位置に再形成するのではなく、新しい配列を返します。

ちなみに、あなたは画像のバイトストリングを取得しようとしているようです-おそらくmy_image.tostring()代わりに使用したいと思います。

于 2012-11-08T05:10:43.850 に答える
3

reshapeその場で動作しません。reshapebackによって返された値をに割り当てていないため、コードは機能していませんimg_buffer

配列を1次元にフラット化する場合、ravelまたはflattenより簡単なオプションである場合。

>>> img_buffer = img_buffer.ravel()
>>> img_buffer.shape
(16384,)

それ以外の場合は、次のようにします。

>>> img_buffer = img_buffer.reshape(np.product(img_buffer.shape))
>>> img_buffer.shape
(16384,)

または、より簡潔に:

>>> img_buffer = img_buffer.reshape(-1)
>>> img_buffer.shape
(16384,)
于 2012-11-08T05:10:11.050 に答える