廃棄画像の割り切れない部分は、画像名にm行n列、図比較的大きな記憶パネルの行と列の大型パネルに切断されます
パネルのターゲット検出対象の位置をマークした後、
その後、モザイクパネルを回し、舗装拡大
1 位コーディング= UTF-8。 2 から PIL インポート画像 3。 #PILは缶画像ステッチを貼り付け 4。 インポートCV2を 5。 インポートnumpyのAS NP 6。 インポートグロブASグロブ 7。 インポートOS 8。 "" " 9。 入力:画像パス(パス+ファイル名) 、小さな画像の列の数を切断することによって得られ、行(すなわち、幅、高さ)の数 10 出力:なし 。11 "" " 12は、 DEFのcrop_one_picture(パス、ファイル名、COLS、行): 13である IMG cv2.imread =(ファイル名,. 1) ##カラー画像を読み取り、画像の透明度(アルファチャンネル)は、デフォルトのパラメータを無視し、グレースケール画像、アルファチャンネルを含む原稿画像を読み取る; 0であることができる、-1、表記 14 = img.shape sum_rows [0] #の高さ 15 sum_cols img.shape = [1] #幅 16 save_path + =パス" \\作物あなたができます。1 {0}} _ {\\ " .format(COLS、行) #保存パス 17。 IF 否定os.path.exists(save_path): 18である os.makdirs(save_path) 。19 プリント(" クロップ画像結果の列{0}、{1}、画像ライン。" .format(INT(sum_cols / COLS)、INT (sum_rows / 行))) 20が 21である ため、I でレンジ(INT(sum_cols / COLS)): 22である ため、J中範囲(INT(sum_rows / 行)): 23 プリント(save_path + STR(os.path.splitext(ファイル名)[0] .split(" \\ ")[ - 1])+ ' _ ' + STR(J )+ ' _ ' + STR(I)+ ' .JPG ' ) 24 cv2.imwrite( 25 save_path + STR(os.path.splitext(ファイル名)[0] .split(" \\ ")[ - 1]) + ' _ ' + STR(J)+ ' _ ' + STR(I)+ ' .JPG '、IMG [* J行:(J + 1)行*、I * COLS:(I + 1)* colsの,:]) 26である 。#cv2.imwrite(」.// //原点IMG _ {{0} } .jpg'.format 1(I、J)、IMG。[* J行:(J + 1)行*、I * COLS:(I + 1)COLS *]) 27 プリント(「カットが完了し、{0を与えます}イメージ。" .format(INT(sum_cols / COLS)* INT(sum_rows / 行))) 28 プリント(" 0でファイル} { " .format(save_path)) 29 30 31である """ トラバーサルファイルフォルダ画像フォーマット"" " 32 DEFのFILE_NAME(のroot_path、PictureType): 33は、 ファイル名= [] 34である ため、ファイルのルート、DIRSでos.walk(のroot_path): 35 用のファイル内のファイル: 36 であれば os.path.splitext(ファイル)[1] == picturetype: 37 filename.append(os.path.join(ルートファイル)) 38 戻りファイル名 39 40のroot_path = ' \\起源-IMG \\。' 41 filenamelist = FILE_NAME(のroot_path、' .JPG ' ) 42 43 プリント(filenamelist) 44 each_name_list = [] 45 用 each_name でfilenamelist: 46 each_name_list.append(each_name.split(" \\ ")[ - 1 ]) 47 プリント(each_name_list) #最終名 48 = 500 W 49 H = 500 50 用 each_img でeach_name_list: 51 crop_one_picture(のroot_path、each_name、W、H )
マージ画像:
1 #コーディング= UTF-8。 2 から PIL インポート画像 3。 #PIL缶画像ステッチを貼り付け 4。 インポートCV2 5。 インポートnumpyのAS NP 6。 インポートグロブASグロブ 7。 インポートOS 8。 9。 "" " 10 11。 入力:画像パス(パス+ファイル名)、画像の列の数がトリミングされ、行の数 12 出力:なし 13はしない " "" 14 DEFの:merge_picture(merge_path) 15 名= FILE_NAME(merge_path、" .JPG 」) 16 形状= cv2.imread(ファイル名[0]、1).shape #三通道的影像需把-1改成1つの 17 COLS =形状[1 ] 18 行= 形状[0] 19 チャネル=形状[2 ] 20 21 22 max_cols_th = 0 23 max_rows_th = 0 24 のための I における範囲(LEN(ファイル名)): 25 IMG = cv2.imread(ファイル名[i]は、1 ) 26 cols_th = INT(ファイル名[I] .split(" _ ") [-1] .split(' ' )[0]) 27 もし cols_th> max_cols_th: 28 max_cols_th = cols_th 29 rows_th = INT(ファイル名[I] .split(" _ ")[ - 2 ]) 30 なら rows_th> max_rows_th: 31 max_rows_th = rows_th 32 プリント(max_rows_th、max_cols_th) 33 num_of_cols = max_cols_th +1 34 num_of_rows = max_rows_th + 1 35 36 37 DST = np.zeros((行×num_of_rows、COLS * num_of_cols、チャネル)、np.uint8) 38 のための I における範囲(LEN(ファイル名))。 39 IMG = cv2.imread(ファイル名[i]は、1 ) 40 cols_th = INT(ファイル名[I] .split(" _ ") - [1] .split(' ' )[0]) 41 rows_th = INT(ファイル名[I] .split(" _ ")[ - 2 ]) 42 プリント(rows_th、cols_th) 43 、ROI = IMG [0:行、0:COLS ,:] 44 45 DST [rows_th *行:(rows_th + 1 )*行cols_th * COLS:(cols_th + 1)* COLS、:] = ROI 46 cv2.imwrite(merge_path + " merge.jpg " 、DST) 47 48 "" " トラバース形式の画像ファイルフォルダ" "" 49 DEFのFILE_NAME(のroot_path、PictureType): 50 名= [] 51である ため、ルートDIRS、ファイル内os.walk(のroot_path): 52である ため、ファイル内のファイル: 53である IF os.path.splitext(ファイル)[1] == PictureType: 54れる filename.append(os.path.join(ルートファイル)) 55 戻りファイル名 56が 57である 58 59 merge_path = " \\ crop500_500起源-IMG \\。 \\ " #の小さな画像フォルダマージするファイル 60 61 merge_picture(merge_path)