三流程序員的辛酸史,自我折磨許久之后終於寫出了符合領導需求的代碼。
批量輸入圖片,此圖片的內容的坐標信息文檔,截取坐標范圍內並再截取比坐標小一圈的圖片,
類似下圖1,坐標文檔截出圖片如圖2,然后按比例截出圖3所示圖片
具體代碼如下:
import cv2 import os RAT = 0.9 def walk_dir(*paths): x_list = [] for path in paths: for (root, dirs, files) in os.walk(path): files = sorted(files) for item in files: x_list.append(item) return x_list def new_cut_image(picture_name, input_dir, output_dir, txt_dir): txt_path = os.path.join( txt_dir, str(picture_name.split('.')[0]) + '.txt') f = open(txt_path) i =1 for line in f.readlines(): boxes = [] linesp = line.split() x1 = linesp[1] y1 = linesp[2] x2 = linesp[3] y2 = linesp[4] boxes.append(x1) # print(boxes[0]) boxes.append(y1) boxes.append(x2) boxes.append(y2) yr = int((int(boxes[3])-int(boxes[1]))*(1-RAT)/2) xr = int((int(boxes[2])-int(boxes[0]))*(1-RAT)/2) xmin = int(boxes[0])+xr ymin = int(boxes[1])+yr xmax = int(boxes[2])-xr ymax = int(boxes[3])-yr srcImage = cv2.imread(input_dir + picture_name) imageROI = srcImage[ymin:ymax, xmin:xmax] # [ymin:ymax, xmin:xmax] output_path = os.path.join(output_dir, str(picture_name.split('.')[0]) + "%03d.jpg" % i) i += 1 cv2.imwrite(output_path, imageROI) if __name__ == '__main__': IMAGE_DIR = r'/home/stt/桌面/s/img/' OUTPUT_DIR = r'/home/stt/桌面/s/9/' txt_dir = '/home/stt/桌面/s/txt/' image_list = walk_dir(IMAGE_DIR) for image in image_list: new_cut_image(image, IMAGE_DIR, OUTPUT_DIR, txt_dir)