likes
comments
collection
share

【Python 实战】---- 批量剪切图片并将剪切后的图片设置为规定尺寸

作者站长头像
站长
· 阅读数 51

1. 需求分析

  1. 获取所有需要剪切的图片名称列表;
  2. 获取图片的尺寸,取短边尺寸为基础进行剪切;
  3. 将剪切的图片修改未统一的尺寸大小;
  4. 将统一处理后的图片进行保存输出。

2. 场景

2.1 转换前的图片

【Python 实战】---- 批量剪切图片并将剪切后的图片设置为规定尺寸

使用手机截图获取的图片,需要批量处理,仅需要中间内容部分,进行正方形裁剪,最终转换为 800*800 的标准图片!!!

2.2 转换后的图片

【Python 实战】---- 批量剪切图片并将剪切后的图片设置为规定尺寸

3. 获取图片名称列表

3.1 实现分析

  1. 使用 os 获取文件夹下的所有文件名称;
  2. 使用 filter 函数过滤出其中的图片文件; 2.1 使用 split 和 pop 方法获取图片的后缀; 2.2 判断后缀是否存在于需要处理的图片格式中; 2.3 将过滤后的数据使用 list 转换为列表返回。

3.2 代码实现

import os

# 获取文件夹下的所有图片文件名
def get_image_names(path):
  names = os.listdir(path)
  filters = list(filter(lambda x : x.split('.').pop() in ['jpg', 'png', 'jpeg', 'bmp'], names))
  return filters

if __name__ == "__main__":
  images = get_image_names("./images")
  print('images',images)

3.3 输出结果

【Python 实战】---- 批量剪切图片并将剪切后的图片设置为规定尺寸

4. 循环处理图片

4.1 读取图片和保存图片

  1. 使用 cv.imread 读取当前图片;
  2. 使用 handle_current_image 处理图片的剪切和缩放; 2.1 使用 src.shape 获取图片的宽高尺寸; 2.2 判断宽高,对图片按照短边进行截取; 2.3 使用 cv.resize 将截取后的图片调整到标准尺寸; 2.4 返回处理完成后的图片;
  3. 使用 cv.imwrite 保存图片到输出文件夹。

4.2 代码实现

import cv2 as cv
import os

# 图像剪切和缩放
def handle_current_image(src):
  # 获取图片尺寸
  h,w,c = src.shape
  # 判断宽高的短边
  if h > w:
    # 计算开始点
    start = int((h - w) / 2)
    # 剪切图片
    img = src[start:w + start,0:w]
  else:
    # 计算开始点
    start = int((w - h) / 2)
    # 剪切图片
    img = src[0:h,start:h + start]
  # 修改图片的尺寸为标准尺寸
  zoom_size_img = cv.resize(img,(int(800),int(800)))
  return zoom_size_img

# 获取文件夹下的所有图片文件名
def get_image_names(path):
  names = os.listdir(path)
  filters = list(filter(lambda x : x.split('.').pop() in ['jpg', 'png', 'jpeg', 'bmp'], names))
  return filters

def handle_image(base,path):
  # 读取图片
  img = cv.imread(f"{base}/{path}")
  # 处理图片
  current_img = handle_current_image(img)
  # 保存图片
  cv.imwrite(f"./images_out/{path}", current_img)

if __name__ == "__main__":
  base = "./images"
  # 获取所有图片
  images = get_image_names(base)

  # 循环获取每一个图片文件名
  for path in images:
    handle_image(base,path)

5. 处理后的最终结果

【Python 实战】---- 批量剪切图片并将剪切后的图片设置为规定尺寸

6. 注意

  1. 对图片的要求,比如现在处理的图片,黑色中间的图片的高度必须大于等于宽度,否则切出来的图片上下会出现部分黑色;
  2. 图片名称注意中文或者中文空格会出现报错,因此尽量使用英文或数字作为图片名称;
  3. 图片尺寸尽量大于规定的标准尺寸,否修改图片后,会导致图片模糊或者拉伸;
  4. 如果涉及入库,还可以将图片和对应的名称进行 excel 导出,这样有利于后期批量操作。
转载自:https://juejin.cn/post/7387305065802285066
评论
请登录