やりたいこと
RGBの画像ファイルを読み込んで、グレースケールかつCSV形式で保存する
需要としてはニッチだと思われるので、自分用のメモの色合いが強いです。
動作環境
google colaboratory
参考元サイト
コード内容
from PIL import Image
import os, glob
import numpy as np
# ここらへんは自分の環境に合わせて下さい
files = glob.glob(path + "/" + class_names[1] + "/" + "*.png")
img_list = []
image = Image.open(files[0])
# image = image.convert("RGB")
image = image.convert("L")
data = np.asarray(image) # <class 'numpy.ndarray'> (33, 13, 3)
print(data)
print(type(data))
print(data.shape)
from matplotlib import pyplot as plt
plt.imshow(data, cmap="gray")
plt.show()
img_list.append(data) # <class 'list'>
print(type(img_list))
img_list = np.array(img_list) # <class 'numpy.ndarray'> shape(1, 33, 13, 3)
plt.imshow(img_list[0], cmap="gray")
plt.show()
import pandas as pd
df = pd.DataFrame(data)
save_path = drive_root_dir + "/xxxxxxx/data/" + "train.csv"
df.to_csv(save_path, encoding="")
この後、img_listに画像を追加していく処理を追加します。
(33, 13, 3)の3つ目の3って、RGBを表していたんですね。やっと理解しました。
コードを修正
画像のtrain.csvデータにしたいので、list型にappendして追加しているところを修正してます。このコードも自分のメモ用の性格が強いので、コメントアウトも確認用に残しています。
from matplotlib import pyplot as plt
from PIL import Image
import os, glob
import numpy as np
files = glob.glob(path + "/" + class_names[1] + "/" + "*.png")
img_list = []
for i, file in enumerate(files):
image = Image.open(file)
image = image.convert("L")
data = np.asarray(image) # <class 'numpy.ndarray'> (33, 13, 3)
# print(data)
# print(type(data))
# print(data.shape)
# plt.imshow(data, cmap="gray")
# plt.show()
img_list.append(data) # <class 'list'>
# print(type(img_list))
# img_list = np.array(img_list) # <class 'numpy.ndarray'> shape(1, 33, 13, 3)
plt.imshow(img_list[i], cmap="gray")
plt.show()
if i == 3: # テストしたいだけなのでbreakしてます
break
import pandas as pd
df = pd.DataFrame(img_list)
save_path = drive_root_dir + "/xxxxx/data/" + "train.csv"
df.to_csv(save_path, encoding="")
print("end")