import numpy as np import cv2 import os import glob #画像に関する情報 width_trim_info = [200,1350] #横のトリム height_trim_info = [500,1050] #縦のトリム #表に関する情報 start_img_num = 100 #表の始まりの画像番号 end_img_num = 200 #表の終わりの画像番号 skip_img_num = 5 #何枚おきに画像を取得するか table_direction = 1 #横:0, 縦:1 table_length = 5 #指定の方向の画像数 table_name = "table.jpg" #保存ファイル名 #挿入文字の情報 text_switch = 0 #テキストの有無(0→あり、1→なし) text_start_num = 300 #挿入する文字の最初の値(例364deg. → 364) test_step_num = 5 #連続画像の数値変化量(⊿t) text_font = cv2.FONT_HERSHEY_DUPLEX text_size = 1 #テキストサイズ text_position = (5,50) #テキスト挿入位置(画像左上が原点で文字列左下の位置をピクセル数で指定) text_unit = "deg." #単位 text_thickness = 2 #文字の太さ #ディレクトリ情報 folderpath = os.getcwd() #実行ディレクトリを取得 filepathes = sorted(glob.glob(folderpath + "/*.png"))[start_img_num:end_img_num] #実行ディレクトリ中のpngファイルを読み込み img_table = np.empty(0) #画像テーブルのndarray table_ele = np.empty(0) #画像テーブル要素(横or縦のみ)のndarray for png_i,filepath in enumerate(filepathes): #表に使用する画像を選択 if png_i%skip_img_num == 0: #skipnumに1回画像を取得 img = cv2.imread(filepath) img = cv2.imread(filepath)[height_trim_info[0]:height_trim_info[1],width_trim_info[0]:width_trim_info[1]] #トリミング if text_switch == 1: pass else: cv2.putText(img, str(text_start_num + (test_step_num*skip_img_num*png_i)) +text_unit, #文字を入力 text_position, text_font, text_size, (0,0,0),text_thickness,cv2.FILLED) #表の改行箇所で結合方向を変える if png_i%(skip_img_num*table_length)==0: #改行される画像を判定 if len(table_ele) != 0: if len(img_table) == 0: img_table = table_ele else: if table_direction == 0: img_table = np.vstack([img_table,table_ele]) elif table_direction == 1: img_table = np.hstack([img_table,table_ele]) else: print("Please input correct value for table direction") table_ele = img else: if table_direction == 0: table_ele = np.hstack([table_ele,img]) elif table_direction == 1: table_ele = np.vstack([table_ele,img]) else: print("Please input correct value for table direction") cv2.imwrite(folderpath +"/"+ table_name, img_table) #グリッド線を入れる img_grid = "img_grid.jpeg" img = cv2.imread(filepathes[0]) img_shape = img.shape hori_line = np.round(np.arange(0,img_shape[1]+img_shape[1]/10,img_shape[1]/10)).astype(int) vert_line = np.round(np.arange(0,img_shape[0]+img_shape[1]/10,img_shape[0]/10)).astype(int) #グリッド線位置を記入 for hori in hori_line: cv2.putText(img, str(hori),(hori,img_shape[0]-5), text_font, text_size, (0,0,0),text_thickness,cv2.FILLED) for vert in vert_line: cv2.putText(img, str(vert),(0,vert), text_font, text_size, (0,0,0),text_thickness,cv2.FILLED) #グリッド線を描画 for row_i,row_img in enumerate(img): for col_i,col_img in enumerate(row_img): if row_i in vert_line: img[row_i][col_i] = [100,100,100] continue else: if col_i in hori_line: img[row_i][col_i] = [100,100,100] cv2.imwrite(folderpath +"/"+ img_grid, img)