web-dev-qa-db-ja.com

numpy配列に複数の画像をロードする方法は?

Numpy配列のディレクトリに複数の画像のピクセルをロードする方法。 numpy配列に単一の画像をロードしました。しかし、ディレクトリから複数の画像をロードする方法を理解することはできません。ここで私がこれまでにしたこと

image = Image.open('bn4.bmp')
nparray=np.array(image)

これにより、32 * 32マトリックスがロードされます。 numpy配列に100個の画像をロードします。 100 * 32 * 32サイズのnumpy配列を作りたい。どうやってやるの ?構造は次のようになります

for filename in listdir("BengaliBMPConvert"):
  if filename.endswith(".bmp"):
       -----------------
  else:
       continue

しかし、numpy配列の画像をロードする方法を見つけることができません

14
Codehead

BMPファイルのリストを取得する

ディレクトリBengaliBMPConvertからBMPファイルのリストを取得するには、次を使用します。

_import glob
filelist = glob.glob('BengaliBMPConvert/*.bmp')
_

一方、ファイル名が既にわかっている場合は、それらを順番に並べてください。

_filelist = 'file1.bmp', 'file2.bmp', 'file3.bmp'
_

すべての画像を1つのnumpy配列に結合

すべての画像を1つの配列に結合するには:

_x = np.array([np.array(Image.open(fname)) for fname in filelist])
_

Numpy配列の酸洗

Pickleを使用してnumpy配列をファイルに保存するには:

_import pickle
pickle.dump( x, filehandle, protocol=2 )
_

ここで、xは保存するnumpy配列、filehandleopen('filename.p', 'wb')などのpickleファイルのハンドル、_protocol=2_はpickleの使用を指示します古くなった古い形式ではなく、現在の形式。

あるいは、numpyによって提供されるメソッドを使用して、numpy配列をピクルスにすることもできます(帽子のヒント: tegan )。配列xをファイル_file.npy_にダンプするには、次を使用します。

_x.dump('file.npy')
_

配列xをファイルから再び読み込むには:

_x = np.load('file.npy')
_

詳細については、 dump および load のnumpyドキュメントを参照してください。

22
John1024

OpenCVの imread() 関数を os.listdir() と一緒に使用

_import numpy as np
import cv2
import os

instances = []

# Load in the images
for filepath in os.listdir('images/'):
    instances.append(cv2.imread('images/{0}'.format(filepath),0))

print(type(instances[0]))
_

クラス 'numpy.ndarray'

これにより、画像のすべてのグレースケール値が保存されているリスト(== instances)が返されます。カラー画像の場合は、単に.format(filepath),1を設定します。

1
2Obe