当前位置: 首页 > news >正文

将图片按照指定大小批量进行裁剪(可设置步长_python)

将图片按照指定大小批量进行裁剪(可设置步长_python)

import os
from PIL import Image

# 设置更高的图像大小限制,禁用解压炸弹检查
Image.MAX_IMAGE_PIXELS = None  # 禁用解压炸弹检查

def crop_image(image_path, block_size=(640, 640), step_size=(340, 340)):
    # 打开图片
    img = Image.open(image_path)
    
    # 获取原图的宽度和高度
    img_width, img_height = img.size

    # 计算裁剪块的宽度和高度
    block_width, block_height = block_size

    # 确保图片尺寸可以被整除(如果不能整除,可以裁剪多余部分)
    cropped_images = []

    for top in range(0, img_height, step_size[1]):  # 使用step_size[1]作为纵向步长
        for left in range(0, img_width, step_size[0]):  # 使用step_size[0]作为横向步长
            # 确保裁剪区域不会越界
            right = min(left + block_width, img_width)
            bottom = min(top + block_height, img_height)
            
            # 裁剪图片
            cropped_image = img.crop((left, top, right, bottom))
            cropped_images.append(cropped_image)

    return cropped_images

def crop_images_in_folder(input_folder, output_folder, block_size=(640, 640), step_size=(340, 340)):
    # 如果输出文件夹不存在,则创建它
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍历输入文件夹中的每一张图片
    for filename in os.listdir(input_folder):
        # 检查文件是否为图片(根据文件扩展名)
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            image_path = os.path.join(input_folder, filename)
            cropped_images = crop_image(image_path, block_size, step_size)

            # 为每个裁剪的图像保存一个新文件
            for i, cropped_img in enumerate(cropped_images):
                output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}_cropped_{i}.jpg")
                cropped_img.save(output_path)
                print(f"保存裁剪图像: {output_path}")

# 输入文件夹和输出文件夹路径
input_folder = r"D:\BaiduNetdiskDownload\数据"  # 请替换成你的输入文件夹路径
output_folder = r"D:\BaiduNetdiskDownload\图片裁剪"  # 请替换成你的输出文件夹路径
block_size = (640, 640)  # 每个小块的尺寸
step_size = (340, 340)  # 步长设置为340

# 执行裁剪操作
crop_images_in_folder(input_folder, output_folder, block_size, step_size)

相关文章:

  • 怎样使用Python编写的Telegram聊天机器人
  • Android compose源码浅析——Modifier
  • Python第八章03:Pyecharts快速入门
  • excel中的VBA指令示例(一)
  • 考研单词笔记 2025.04.09
  • docker 运行自定义化的服务-前端
  • Memcached缓存系统:从部署到实战应用指南
  • 银河麒麟系统虚拟机网络ping不通的解决方法
  • 题目练习之位运算
  • OpenAI Operator:开启 AI 智能体的无限可能
  • 力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图
  • 8个方向使用DeepSeek打磨完美课题申报书!
  • 我谈冈萨雷斯关于离散傅里叶变换(DFT)的两点误解
  • esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片
  • 从 0 到上线:Java 项目打包 Docker 镜像全流程实战
  • 宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析
  • 机器学习01-支持向量机(SVM)(未完)
  • 【从零开始学习JVM | 第一篇】快速认识JVM
  • Vue3 结合 Element Plus 和 Vue Router 的完整安装配置及使用详解
  • Django REST Framework系列教程(9)——过滤与排序
  • 宁德北京网站建设/2345浏览器官网
  • 汉阴做网站/国外域名注册网站
  • 网站空间 哪个公司好/搜索引擎营销的优缺点及案例
  • 网站如何分页/免费引流推广怎么做
  • 网站系统渗透测试报告/重庆seo论坛
  • 网站建设 中企动力/企业如何建站