- 画像の読み込み(今回はグレー画像)
- ROI (今回の画像は300×300pixel、中央56×56 pixelを使う)
- リサイズ(伝統的なサンプルにならって28×28 pixelにするため0.5倍)
- フリップ・回転(サンプル画像を8倍に増やすため)
revel()
で1次元化
import cv2
import numpy as np
import matplotlib.pyplot as plt
def get_image_data(filename):
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE).astype(np.float32)
height = img.shape[0]//2
width = img.shape[1]//2
width2 = 28
img1 = cv2.resize(img[height-width2:height+width2,width-width2:width+width2],None,fx=0.5,fy=0.5)
img2 = cv2.flip(img1,0)
img3 = cv2.flip(img1,1)
img4 = cv2.flip(img1,-1)
vimg=[]
vimg=[img1,img2,img3,img4,np.rot90(img1),np.rot90(img2),np.rot90(img3),np.rot90(img4)]
if False:
for img in vimg:
plt.imshow(img)
plt.show()
return [img.ravel() for img in vimg]
- フォルダから画像ファイル一覧を作成、
extend
で配列に詰めていく。
- 同時に、判定結果である
Y0
も作成する。
- 最後に、
np.array
に変換し、再利用するために pickle
で保存しておく。
import glob
import pickle
gomi_dir = r"./Gomi/*.png"
nonv_dir = r"./NonVertex/*.png"
gomi_files = glob.glob(gomi_dir)
nonv_files = glob.glob(nonv_dir)
X0 = []
Y0 = []
for file in gomi_files:
X0.extend(get_image_data(file))
Y0.extend([0.0 for _ in range(8)])
for file in nonv_files:
X0.extend(get_image_data(file))
Y0.extend([1.0 for _ in range(8)])
X = np.array(X0)
Y = np.array(Y0)
pickle.dump((X, Y), open("mydata.pickle",'wb'))
print("Data size:",len(X))