このようなディレクトリには、約200個のグレースケールPNG画像が保存されています。
1.png
2.png
3.png
...
...
200.png
すべてのPNG画像をNumPy配列としてインポートしたい。これどうやってするの?
Scipy、globを使用してPILをインストールすると(pip install pillow
)、scipyの imread メソッドを使用できます。
from scipy import misc
import glob
for image_path in glob.glob("/home/adam/*.png"):
image = misc.imread(image_path)
print image.shape
print image.dtype
ドキュメントによると、scipy.misc.imread
はSciPy 1.0.0以降では非推奨であり、1.2.0で削除される予定です。 imageio.imread instead
の使用を検討してください。 Charlesによる答え を参照してください。
パーティーに少し遅れましたが、現在の回答は非推奨になりました。
doc によると、scipy.misc.imread
はSciPy 1.0.0以降では非推奨であり、1.2.0で削除されます。代わりに imageio.imread
の使用を検討してください。
例:
import imageio
im = imageio.imread('my_image.png')
print(im.shape)
Imageioを使用して派手なソースから読み込むこともできます。
im = imageio.imread('http://upload.wikimedia.org/wikipedia/commons/d/de/Wikipedia_Logo_1.0.png')
編集:
特定のフォルダーにある*.png
ファイルをすべて読み込むには、glob
パッケージを使用できます。
import imageio
import glob
for im_path in glob.glob("path/to/folder/*.png"):
im = imageio.imread(im_path)
print(im.shape)
# do whatever with the image here
これは、 PILライブラリ のImage
クラスでも実行できます。
from PIL import Image
import numpy as np
im_frame = Image.open(path_to_file + 'file.png')
np_frame = np.array(im_frame.getdata())
画像をロードする場合は、matplotlib
とopencv
の一方または両方を操作して、画像を操作および表示することになるでしょう。
このため、私は彼らの画像リーダーを使用し、それらをリストに追加し、そこからNumPy配列を作成する傾向があります。
import os
import matplotlib.pyplot as plt
import cv2
import numpy as np
# Get the file paths
im_files = os.listdir('path/to/files/')
# imagine we only want to load PNG files (or JPEG or whatever...)
EXTENSION = '.png'
# Load using matplotlib
images_plt = [plt.imread(f) for f in im_files if f.endswith(EXTENSION)]
# convert your lists into a numpy array of size (N, H, W, C)
images = np.array(images_plt)
# Load using opencv
images_cv = [cv2.imread(f) for f in im_files if f.endswith(EXTENSION)]
# convert your lists into a numpy array of size (N, C, H, W)
images = np.array(images_cv)
注意すべき唯一の違いは次のとおりです。
したがって、サイズが256 * 256の単一イメージは、opencvでサイズ(3、256、256)のマトリックスを生成し、matplotlibを使用して(256、256、3)を生成します。
私は少し変更し、すべての画像が同じ次元である限り、このように機能し、1つの単一の配列にダンプされました。
png = []
for image_path in glob.glob("./train/*.png"):
png.append(misc.imread(image_path))
im = np.asarray(png)
print 'Importing done...', im.shape
(非常に)一般的に使用されるパッケージを使用することをお勧めします。
import matplotlib.pyplot as plt
im = plt.imread('image.png')