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

【使用 Python 进行图像裁剪的多种方法】

以下为您介绍使用 Python 进行图像裁剪的多种方法及代码示例:

使用 PIL 库(Pillow):
PillowPython 中一个强大的图像处理库,其截图功能不仅可以获取屏幕截图,还能对截图进行丰富的图像处理操作。例如,您可以使用 Pillow 库对截图进行裁剪。

from PIL import Image

# 打开图像
img = Image.open('image.jpg')

# 定义裁剪区域,例如左上角坐标为 (100, 100),右下角坐标为 (300, 300)
left = 100
top = 100
right = 300
bottom = 300

# 进行裁剪
cropped_img = img.crop((left, top, right, bottom))

# 保存裁剪后的图像
cropped_img.save('cropped_image.jpg')

裁剪前:
请添加图片描述
裁剪后:
请添加图片描述

使用 OpenCV 库:

import cv2

# 读取图像
img = cv2.imread('image.jpg')

# 定义裁剪区域,例如左上角坐标为 (100, 100),右下角坐标为 (300, 300)
cropped_img = img[100:300, 100:300]

# 保存裁剪后的图像
cv2.imwrite('cropped_image.jpg', cropped_img)

此外,还有其他方式,如:

from PIL import Image

# 打开图像
img = Image.open('image.jpg')

# 循环裁剪
for i in range(0, 350, 50):
    region = img.crop((i, 0, i + 50, 50))
    region.save(f'./test/{i}.png')

希望这些示例能够帮助您使用 Python 进行图像裁剪。在实际应用中,您可以根据具体需求调整裁剪区域的坐标和处理方式。

Python图像裁剪的高级技巧

Python 提供了多种库来实现图像裁剪,例如 PIL(Pillow)OpenCV 等。高级技巧可能包括根据特定条件进行自适应裁剪,或者结合机器学习算法来智能识别裁剪区域。例如,通过分析图像的像素分布和特征,确定最有价值的裁剪区域。另外,还可以使用多线程或分布式计算来加速大规模图像的裁剪处理。
以下是一些更复杂的 Python 图像裁剪代码示例:

示例一:按比例裁剪图像中心区域

from PIL import Image

def crop_center_image(image_path, output_path, percentage):
    img = Image.open(image_path)
    width, height = img.size
    new_width = int(width * percentage)
    new_height = int(height * percentage)
    left = (width - new_width) // 2
    top = (height - new_height) // 2
    right = left + new_width
    bottom = top + new_height
    cropped_img = img.crop((left, top, right, bottom))
    cropped_img.save(output_path)

crop_center_image('input_image.jpg', 'output_image.jpg', 0.8)

这个函数可以根据给定的百分比裁剪图像的中心区域。

示例二:批量裁剪图像并保存到不同文件夹

import os
from PIL import Image

def batch_crop_images(input_folder, output_folder, crop_size):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.png', '.jpeg')):
            img = Image.open(os.path.join(input_folder, filename))
            width, height = img.size
            left = (width - crop_size[0]) // 2
            top = (height - crop_size[1]) // 2
            right = left + crop_size[0]
            bottom = top + crop_size[1]
            cropped_img = img.crop((left, top, right, bottom))
            cropped_img.save(os.path.join(output_folder, filename))

batch_crop_images('input_folder', 'output_folder', (200, 200))

这个函数可以批量裁剪指定文件夹中的图像,并将裁剪后的图像保存到另一个文件夹中。

示例三:根据特定坐标范围裁剪图像

from PIL import Image

def crop_image_by_coordinates(image_path, output_path, x_range, y_range):
    img = Image.open(image_path)
    cropped_img = img.crop((x_range[0], y_range[0], x_range[1], y_range[1]))
    cropped_img.save(output_path)

crop_image_by_coordinates('input_image.jpg', 'output_image.jpg', (100, 300), (50, 250))

这个函数可以根据给定的 x 和 y 坐标范围裁剪图像。
示例四:实现批量图片裁剪

from PIL import Image
import os

def batch_crop_images(input_folder, output_folder):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.png', '.jpeg')):
            img = Image.open(os.path.join(input_folder, filename))
            # 定义裁剪区域,这里假设都是左上角坐标为 (100, 100),右下角坐标为 (300, 300)
            left = 100
            top = 100
            right = 300
            bottom = 300
            cropped_img = img.crop((left, top, right, bottom))
            cropped_img.save(os.path.join(output_folder, filename))

input_folder = 'input_images_folder'
output_folder = 'output_images_folder'
batch_crop_images(input_folder, output_folder)

把需要裁剪的图片放到 ‘input_images_folder’ 文件夹,运行后进行裁剪并输出到 ‘output_images_folder’ 文件夹中

在这个代码中,首先定义了一个函数batch_crop_images,它接受输入文件夹和输出文件夹的路径作为参数。函数首先检查输出文件夹是否存在,如果不存在则创建它。然后遍历输入文件夹中的所有文件,如果文件是图片格式(.jpg.png.jpeg),则打开图像,进行裁剪,并将裁剪后的图像保存到输出文件夹中。

你可以根据实际情况修改输入文件夹和输出文件夹的路径以及裁剪区域的坐标。


http://www.kler.cn/a/284100.html

相关文章:

  • StructuredStreaming (一)
  • Vector Optimization – Stride
  • Android Studio 将项目打包成apk文件
  • 三正科技笔试题
  • 力扣104 : 二叉树最大深度
  • Springboot 日志处理(非常详细)
  • Leetcode Hot 100刷题记录 -Day5(双指针)
  • 1.7 离散频率
  • python学习-04【流程控制语句】
  • Qt 调用MFC dll,动态库中有界面
  • 数据结构——链式二叉树的实现与分治编程思维(c语言实现)
  • sql-labs靶场(41-50)
  • unity脚本
  • 理解 Maven 依赖范围及编译与运行时的需求
  • 无缝 CI/CD:如何在 Windows 环境中使用 Docker 和 Jenkins 自动化部署 .NET 应用
  • 嵌入式全栈开发学习笔记---Linux系统编程(进程控制)
  • 全球城市多边形和点数据集 (GUPPD)
  • 带你手撕面试题——定时器方案:红黑树版
  • OSINT技术情报精选·2024年8月中旬
  • 美容院拓客营销门店管理小程序渠道进行
  • 我的世界实体与生物ID表
  • 前后端传参@RequestParam使用上的一个小坑
  • 代码随想录八股训练营总结篇 2024年8月
  • 爬虫入门urllib 和 request (一)
  • Java+selenium 实现网页缩放的方法:用于解决页面太长部分元素定位不到的问题
  • 企业级NoSql数据库 --- Redis集群