输入:图片,box(json文件)。输出:裁剪后图片。
import os
import cv2
import json
import argparse
def prepdata(json_file, img_file, out_dir):
with open(json_file) as f:
content = json.loads(f.read())
if os.path.isdir(img_file):
for filename in os.listdir(img_file):
file, suffix = os.path.splitext(filename)
img_path = os.path.join(img_file, filename)
img = cv2.imread(img_path)
h, w = img.shape[:2]
if suffix.lower() not in [".jpg", ".png", ".jpeg"]:
continue
for i, item in enumerate(content[file]):
x1, y1, x2, y2, x3, y3, x4, y4 = item["points"][0][0], item["points"][0][1],\
item["points"][1][0], item["points"][1][1],\
item["points"][2][0], item["points"][2][1],\
item["points"][3][0], item["points"][3][1]
x_min = max(0, min(x1, x4))
y_min = max(0, min(y1, y2))
x_max = min(w, max(x2, x3))
y_max = min(h, max(y3, y4))
img_crop = img[y_min:y_max, x_min:x_max]
print(img_crop)
save_path = os.path.join(out_dir, file+str(i)+suffix)
if img_crop.size != 0:
cv2.imwrite(save_path, img_crop)
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("--json_file", default="./train_full_labels.json")
parser.add_argument("--img_file", default="./train_full_images/")
parser.add_argument("--out_dir", default="./train/")
return parser.parse_args()
def main(args):
if not os.path.exists(args.out_dir):
os.makedirs(args.out_dir)
prepdata(args.json_file, args.img_file, args.out_dir)
if __name__ == "__main__":
main(get_args())