【代码笔记】用python实现图像的批量剪裁

参考:https://blog.csdn.net/weixin_43289135/article/details/107645125

功能:
输入是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])

你可能感兴趣的:(可能还会再用到的代码汇总,python)