图片裁剪 脚本编写

输入:图片,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())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值