123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import argparse
- import datetime
- from tqdm import tqdm
- import json
- import os
- import cv2
- import uuid
- def read_jsonfile(self, path):
- with open(path, "r", encoding='utf-8') as f:
- return json.load(f)
- def image_cut_save(path, left, upper, right, lower, save_path, pix):
- """
- 所截区域图片保存
- :param pix: 将图片height缩放的pix
- :param path: 图片路径
- :param left: 区块左上角位置的像素点离图片左边界的距离
- :param upper:区块左上角位置的像素点离图片上边界的距离
- :param right:区块右下角位置的像素点离图片左边界的距离
- :param lower:区块右下角位置的像素点离图片上边界的距离
- 故需满足:lower > upper、right > left
- :param save_path: 所截图片保存位置
- """
- img = cv2.imread(path) # 打开图像
- cropped = img[upper:lower, left:right]
- if pix != 0:
- height, width = cropped.shape[:2] # 原始分辨率
- if height != 0 and width != 0:
- while height < pix or width < pix:
- if height <= width:
- # 等比例缩放到pix
- scale = pix / height
- # 缩放后分辨率
- height = pix
- width = int(width * scale)
- else:
- # 等比例缩放到pix
- scale = pix / width
- # 缩放后分辨率
- width = pix
- height = int(height * scale)
- img = cv2.resize(cropped, (width, height))
- # 保存截取的图片
- cv2.imwrite(save_path, img)
- else:
- cv2.imwrite(save_path, cropped)
- def single_img_cut(json_path, label, img_save_path, cnt, pix):
- with open(json_path, "r", encoding='utf-8') as f:
- cnt1 = 1
- jf = json.load(f)
- shapes = jf["shapes"]
- for shape in shapes:
- if shape["label"] == label:
- time = datetime.datetime.now()
- t = str(time.month).zfill(2) + str(time.day).zfill(2) + str(time.hour).zfill(2) + str(
- time.minute).zfill(2) + \
- str(time.second).zfill(2)
- image_cut_save(json_path.replace('json', 'jpg'), int(shape["points"][0][0]), int(shape["points"][0][1]),
- int(shape["points"][1][0]), int(shape["points"][1][1]),
- img_save_path + '/' + 'kdan' + '_' + t + '_' + str(uuid.uuid1())[0:8] + '_' + str(
- cnt).zfill(5) + str(cnt1).zfill(3) + '.jpg', pix)
- cnt1 += 1
- f.close()
- if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument('--input_dirs', type=str, nargs="+", default=['./'])
- parser.add_argument('--label', type=str, default='Table')
- parser.add_argument('--save_dir', type=str, default='./imgs')
- parser.add_argument('--size', type=int, default='0')
- args = parser.parse_args()
- cnt = 1
- input_list = args.input_dirs
- # 文件夹列表
- json_list = []
- # 遍历input_list
- for jp in input_list:
- json_img_list = os.listdir(jp)
- for path in json_img_list:
- if path.endswith('.json'):
- path = os.path.join(jp, path)
- json_list.append(path)
- if not os.path.exists(args.save_dir):
- os.makedirs(args.save_dir)
- for path in tqdm(json_list):
- single_img_cut(path, args.label, args.save_dir, cnt, args.size)
- cnt += 1
|