功能:
输入是D:/MINE/test文件夹下的所有图像,输出保存在D:/MINE/test/out。路径名称必须全是英文!
假设test文件夹下有图像1.png,运行代码后out文件夹下有1_orig.png、1_gt.png、1_raw.png、1_now.png四张图片,分别对应1.png的左上角、左下角、右上角、右下角,也就是将一张图像切分成了2×2四块子图像。
代码:
import numpy as np
import cv2
import os
def update(input_img_path, output_img_path, place):
image = cv2.imread(input_img_path)
cropped = image[place[0]:place[1], place[2]:place[3]] # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite(output_img_path, cropped)
dataset_dir = 'D:/MINE/test' # 需要剪裁的图像所在目录
# 获得需要转化的图片路径并生成目标路径
names = [name for name in os.listdir(dataset_dir)
if os.path.isfile(os.path.join(dataset_dir, name))] # 仅获得该目录下的文件名,而不包括文件夹名
suffix = ['_orig','_gt','_raw','_now']
place = [[60,550,70,990],
[585,1075,70,990],
[60,550,1000,1920],
[585,1075,1000,1920]]
for m, i in enumerate(suffix):
output_dir = 'D:/MINE/test/out' # 剪裁好的图像的存放位置
if not os.path.isdir(output_dir):
os.makedirs(output_dir)
image_filenames = [(os.path.join(dataset_dir, x), os.path.join(output_dir, x.split('.')[0]+i+'.png'))
for x in names]
for path in image_filenames:
print(path[0])
print(path[1])
update(path[0], path[1], place[m])