前提
numpyデータ構造:(3000,28,28)
28×28の白黒(0-1)のnumpy行列が3000個
実現したいこと
- 前提で記載したnumpy行列について3000枚の行列をpngもしくはjpgにして特定のフォルダに保存したいです。
よろしくお願いいたします。
試しているコード
print("numpyの画像データ(3000枚)")
print("img_data.shape=", img_data.shape)
print()
print("img_data=", img_data)
print()
print("numpyの画像データ(3000枚):色情報(次元)を落とした画像データ(3000枚)")
test = np.squeeze(img_data)
print("test.shape=", test.shape)
print()
print("test=", test)
print()
test1 = test[0:20,:,:]
print("numpyの画像データ(20枚)")
print("test1.shape=", test1.shape)
print()
print("test1=", test1)
print()
x_split = np.split(test1, 20)
print("numpyの画像データ(20枚)を20分割したもの(list形式)")
print("x_split=", x_split)
print()
x_split2 = np.array(x_split)
print("numpyの画像データ(20枚)を20分割したもの(ndarray形式)")
print("x_split2.shape=", x_split2.shape)
print()
print("x_split2=", x_split2)
print()
for i, x in enumerate(x_split2):
print(f'x_split2[{i}]形状: \n{x.shape}')
new_name = "画像-{0:03d}.jpg".format(i + 1)
im1 = x.astype(np.uint8)
im2 = Image.fromarray(im1[0])
im2.convert("RGB")
im2.save(new_name)
試しているコードの結果(一部抜粋)
numpyの画像データ(3000枚)
img_data.shape= (3000, 1, 28, 28)
img_data= [[[[0.99207843 0.99207843 0.99207843 ... 1. 1.
0.99207843 ]
[0.99207843 0.99207843 0.99207843 ... 0.6901961 1.
1. ]
[0.99207843 0.99207843 0.99207843 ... 0. 0.
1. ]
...
[0.99207843 0.99207843 0.99207843 ... 0.99207843 0.99207843
0.99607843]
[0.99207843 0.99207843 0.99207843 ... 0.99207843 0.99207843
0.99207843 ]
[0.99207843 0.99207843 0.99207843 ... 0.99207843 0.99207843
0.99207843 ]]]
numpyの画像データ(3000枚):色情報(次元)を落とした画像データ(3000枚)
test.shape= (3000, 28, 28)
test= [[[0.99607843 0.99607843 0.99607843 ... 1. 1. 0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.6901961 1. 1. ]
[0.99607843 0.99607843 0.99607843 ... 0. 0. 1. ]
...
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]]
[[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843 0.99607843]
...
[0.99607843 0.99607843 0.99607843 ... 0. 0. 0. ]
[0.99607843 0.99607843 0.99607843 ... 0. 0. 0.2627451 ]
[0.99607843 0.99607843 0.99607843 ... 0.9490196 1. 1. ]]
numpyの画像データ(20枚)
test1.shape= (20, 28, 28)
numpyの画像データ(20枚)を20分割したもの(list形式)
x_split= [array([[[0.99607843, 0.99607843, 0.99607843, 0.99607843, 0.99607843,
0.99607843, 1. , 1. , 0.09803922, 0. ,
0.972549 , 1. , 0.99607843, 0.99607843, 0.99607843,
0.99607843, 0.99607843, 0.99607843, 0.99607843, 0.99607843,
0.99607843, 0.99607843, 1. , 1. , 1. ,
1. , 1. , 0.99607843],
[0.99607843, 0.99607843, 0.99607843, 0.99607843, 0.99607843,
1. , 1. , 0.01176471, 0. , 0. ,
numpyの画像データ(20枚)を20分割したもの(ndarray形式)
x_split2.shape= (20, 1, 28, 28)
x_split2= [[[[0.99607843 0.99607843 0.99607843 ... 1. 1.
0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.6901961 1.
1. ]
[0.99607843 0.99607843 0.99607843 ... 0. 0.
1. ]
...
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843
0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843
0.99607843]
[0.99607843 0.99607843 0.99607843 ... 0.99607843 0.99607843
0.99607843]]]
x_split2[0]形状:
(1, 28, 28)
x_split2[1]形状:
(1, 28, 28)
x_split2[2]形状:
(1, 28, 28)
x_split2[3]形状:
(1, 28, 28)
x_split2[4]形状:
(1, 28, 28)
x_split2[5]形状:
(1, 28, 28)
x_split2[6]形状:
(1, 28, 28)
x_split2[7]形状:
(1, 28, 28)
x_split2[8]形状:
(1, 28, 28)
x_split2[9]形状:
(1, 28, 28)
x_split2[10]形状:
(1, 28, 28)
x_split2[11]形状:
(1, 28, 28)
x_split2[12]形状:
(1, 28, 28)
x_split2[13]形状:
(1, 28, 28)
x_split2[14]形状:
(1, 28, 28)
x_split2[15]形状:
(1, 28, 28)
x_split2[16]形状:
(1, 28, 28)
x_split2[17]形状:
(1, 28, 28)
x_split2[18]形状:
(1, 28, 28)
x_split2[19]形状:
(1, 28, 28)
困っていること
コードはエラーなく回り、画像も指定のフォルダに「画像-001,画像-002」のように保存されるのですが、画像の中身がすべての画像で真っ黒になってしまいます。
どこか処理が間違っているでしょうか。
解決
255で行列を割っていたことを失念しており、255をかけて元に戻して同様にコードを回したところ、無事画像を出力することができました。
回答1件
あなたの回答
tips
プレビュー