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)
Python 切割任意图片
最新推荐文章于 2024-04-19 16:44:29 发布