在做機器學習時獲得的資料圖片內容常常是很雜亂的
訓練的目標可能只是一大張圖裡的一小區塊
那此時我們可以進行批次裁切以節省時間

裁切大小

首先我們必須先確認好需要裁切的區域(X,Y軸座標)
如裁切目標座標為[0:498, 496:1263],則裁切的區域為(496,0)與(1263,498)構成的矩形

完整程式碼

程式碼中比較需要注意的是影像讀入的方式與前幾篇稍微有些不同

1
2
img_1 = cv2.imread('test.jpg')  #讀入圖片
img_2 = cv2.imdecode(np.fromfile(filepath,dtype=np.uint8),cv2.IMREAD_COLOR)

但實際上都是讀入圖片,imread是從指定路徑讀入圖片,imdecode是從指定的緩存內讀入圖片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
from os import walk
import cv2
import numpy as np

mypath = "目標資料夾"
file=[]
# 遞迴列出所有子目錄與檔案
print("Processing....")
for root, dirs, files in walk(mypath):
for i in range(len(files)):
filepath=root+"/"+files[i]
img = cv2.imdecode(np.fromfile(filepath,dtype=np.uint8),cv2.IMREAD_COLOR)
cropped = img[0:498, 496:1263] # 裁剪座標[y0:y1, x0:x1]
img_file = "data/"+root.split('/')[1]+'/'
if not os.path.exists(img_file):
os.mkdir(img_file)
cv2.imencode('.bmp', cropped)[1].tofile(img_file+files[i])
print("Done.")