Python 切割任意图片

import datetime

import numpy as np
import cv2
import os
import json


def split_img_duo(path):
    count = 1
    for root, dirs, files in os.walk(path):
        for file in files:
            if os.path.splitext(file)[-1] == '.json':
                with open(os.path.join(root, file)) as f:
                    data = json.load(f)
                region1 = eval(data['region1'])
                region2 = eval(data['region2'])
                xmin = round(region1[3][0] + (region2[0][0] - region1[3][0]) / 2 )
                xmax = round(region1[2][0] + (region2[1][0] - region1[2][0]) / 2)

            if os.path.splitext(file)[-1] == '.jpg':
                cv_img = cv2.imdecode(np.fromfile(os.path.join(root, file), dtype=np.uint8), -1)
                sp = cv_img.shape
                width = sp[1]
                heitht = sp[0]
                # 多边形时,进行构建下面的数组即可
                left = np.array([[0, 0], [0, heitht], [xmax, heitht], [xmin, 0]], dtype=np.int32)
                right = np.array([[xmin, 0], [xmax, heitht], [width, heitht], [width, 0]], dtype=np.int32)
                img_left = np.zeros([heitht, width, 3], dtype=np.uint8)
                img_right = np.zeros([heitht, width, 3], dtype=np.uint8)
                cv2.fillPoly(img_left, [left], (255, 255, 255))
                cv2.fillPoly(img_right, [right], (255, 255, 255))
                try:
                    bitwiseAnd_left = cv2.bitwise_and(cv_img, img_left)
                    bitwiseAnd_right = cv2.bitwise_and(cv_img, img_right)

                    nowTime = datetime.datetime.now().strftime('%H%M%S')
                    count += 1
                    write_path = './train_data/' + str(nowTime) + '_' + str(count) + '.jpg'
                    cv2.imencode('.jpg', bitwiseAnd_left, )[1].tofile(write_path)
                    count += 1
                    write_path = './train_data/' + str(nowTime) + '_' + str(count) + '.jpg'
                    cv2.imencode('.jpg', bitwiseAnd_right, )[1].tofile(write_path)
                except:
                    print(os.path.join(root, file))



if __name__ == '__main__':
    path = '/media/jq-riskserver/8B1E6D0D7F4CE9EF/project/dat'
    path = '/home/jq-riskserver/Desktop/1'
    split_img_duo(path)

原图切割后

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python图像识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值