「ほっ」と。キャンペーン

[python]cifar10の画像をbmpでファイル出力

自分メモ
すごい俺得

cifar10データセットは以下
CIFAR-10 and CIFAR-100 datasets

bmpでファイルに保存する、というソースが意外に見つからない。

extract_cifar10_bmp.py
import cPickle
import argparse
from PIL import Image
import numpy

# 引数で、cifar10ファイルと、何番目のbmpを取り出すか指定する
# ex) extract_cifar10_bmp.py cifar-10-batches-py/data_batch_1 0
#   data_batch_1.0_leptodactylus_pentadactylus_s_000004.png.bmp を作成

parser = argparse.ArgumentParser()
parser.add_argument('dfile', help='cifar10_file')
parser.add_argument('nth', help='number of image(0-)')
args = parser.parse_args()
dfile = args.dfile
nth = args.nth

# cifar10ファイルを開いて読み込む
fh = open(dfile, 'rb')
pickles = cPickle.load(fh)
fh.close()
one_pickle = pickles['data'][int(nth)] # 指定番目の画像データ
# ↑ 3072 要素の配列 ([R....G....B...]のように並んでいる)

# 出力ファイル名作成

outfile = dfile + '.' + nth + '_' + pickles['filenames'][int(nth)] + '.bmp'

# 3072の一次元配列を、3x32x32 の三次元配列に変換
# [ [R(32x32)], [G(32x32)], [B(32x32)] ] の形式になる

3darr = numpy.reshape(one_pickle, (3,32,32))

# RGB のように並べる
# [ [ RGB ... 32個], [ RGB ... 32個],... 32個 ] の形式に変換

rgbarr = numpy.rollaxis(3darr, 0, 3)

# PIL に変換してファイルに出力
pilImg = Image.fromarray(rgbarr, 'RGB')
pilImg.save(outfile, 'BMP')
print outfile


遅ればせながら、ようやくpythonを書き始めたので、
まだエラー処理とかわからないんです(笑

追記:
pngで保存する場合は、以下が参考になりそう。
https://github.com/mitmul/chainer-cifar10/blob/master/dataset.py
87行目あたりとか
[PR]
by xiaoxia | 2016-03-01 19:49 | プログラム言語 | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞