一、读取文件夹图片
输入:
- img_path:存放图片的文件夹名
- n:图片分割份数
# 图片文件夹名, 切割份数
def read_img(img_path: str, n: int):
img_array = [] # 用于保存图片
# 图片送入列表
for filename in os.listdir(r'./' + img_path):
# img = cv2.imread(img_path + '/' + filename)
img_array.append(filename)
# 获取索引和图片名
for i, img_dir in enumerate(img_array):
# 送入图片分割函数,批量分割
img_cut(r'./' + img_path + '/' + img_dir, i, n)
二、图像分割函数:
输入:
- img_path:图片路径
- i :第i张图片
- n: 分割份数
# 图片切割
def img_cut(img_path:str, i: int, n: int):
# 切割后的图片保存位置
file = './LR'
folder = os.path.exists(file)
if not folder:
os.mkdir(file)
img = Image.open(img_path)
# 获取图片的宽和高
width, high = img.size
item_width = width / math.sqrt(n)
item_high = high / math.sqrt(n)
print(f'正在处理第{i + 1}张图片')
i = i * n
for row in range(0, n):
for clu in range(0, n):
# 矩形框
box = (item_width * clu, item_high * row, item_width * (clu + 1), item_high * (row + 1))
# 根据矩形框剪裁
img_crop = img.crop([box[0], box[1], box[2], box[3]])
i += 1
# 按行优先保存图片
img_crop.save(f'{file}/' + f'{i}' + '.png')
完整代码:
from PIL import Image
import os
import math
# 图片切割
def img_cut(img_path:str, i: int, n: int):
# 切割后的图片保存位置
file = './LR'
folder = os.path.exists(file)
if not folder:
os.mkdir(file)
img = Image.open(img_path)
# 获取图片的宽和高
width, high = img.size
item_width = width / math.sqrt(n)
item_high = high / math.sqrt(n)
print(f'正在处理第{i + 1}张图片')
i = i * n
for row in range(0, n):
for clu in range(0, n):
# 矩形框
box = (item_width * clu, item_high * row, item_width * (clu + 1), item_high * (row + 1))
# 根据矩形框剪裁
img_crop = img.crop([box[0], box[1], box[2], box[3]])
i += 1
img_crop.save(f'{file}/' + f'{i}' + '.png')
# 图片文件夹名, 切割份数
def read_img(img_path: str, n: int):
img_array = [] # 用于保存图片
# 图片送入列表
for filename in os.listdir(r'./' + img_path):
# img = cv2.imread(img_path + '/' + filename)
img_array.append(filename)
# 获取索引和图片名
for i, img_dir in enumerate(img_array):
# 送入图片分割函数,批量分割
img_cut(r'./' + img_path + '/' + img_dir, i, n)
read_img('img_ori', 16)