详解用Python对图片进行循环剪裁

  • Post category:Python

剪裁图片是在计算机视觉和图像处理中很常见的任务。Python对这一任务提供了很好的支持。本攻略将详细讲解如何用Python对图片进行循环剪裁。

准备工作

在开始编写代码前,需要安装Python的图像处理库Pillow。可以使用以下命令进行安装:

pip install Pillow

加载图片

首先,需要从本地磁盘或远程URL中加载要剪切的图片。可以使用Pillow库中的Image.open()方法来实现。

from PIL import Image

image_path = "path/to/image.jpg"
image = Image.open(image_path)

剪切图片

在剪切图片前,需要确定剪切后图像的大小和位置。下面是一个示例,将原始图像剪切为5个大小相同的图像:

width, height = image.size
crop_width, crop_height = width//5, height
for i in range(5):
    left = i*crop_width
    top = 0
    right = left + crop_width
    bottom = crop_height
    crop = image.crop((left, top, right, bottom))

crop()方法接受一个四元组参数,包含剪切后图像的左、上、右和下像素坐标。

保存剪切的图片

可以使用crop.save()方法将剪切后的图片保存到本地。以下是一个将每个剪切后的图像保存为单独文件的示例:

for i in range(5):
    left = i * crop_width
    top = 0
    right = left + crop_width
    bottom = crop_height
    crop = image.crop((left, top, right, bottom))
    crop.save(f"path/to/output_{i}.jpg")

可以将path/to/output替换为保存文件的路径,{i}表示文件的编号。

示例说明

示例一

剪切图片为正方形数量的小图片:

from PIL import Image

image = Image.open("path/to/image.jpg")

width, height = image.size
crop_size = min(width, height)
crop_width, crop_height = crop_size // 3, crop_size // 3

for i in range(3):
    for j in range(3):
        left = i * crop_width
        top = j * crop_height
        right = left + crop_width
        bottom = top + crop_height
        crop = image.crop((left, top, right, bottom))
        crop.save(f"path/to/output_{i}_{j}.jpg")

该示例将原始图像剪切为3×3个大小相同的方形图像。

示例二

剪切图片为长方形大小的小图片:

from PIL import Image

image = Image.open("path/to/image.jpg")

width, height = image.size
crop_width, crop_height = 200, 300

for i in range(width // crop_width):
    for j in range(height // crop_height):
        left = i * crop_width
        top = j * crop_height
        right = left + crop_width
        bottom = top + crop_height

        if right > width:
            right = width
        if bottom > height:
            bottom = height

        crop = image.crop((left, top, right, bottom))
        crop.save(f"path/to/output_{i}_{j}.jpg")

该示例将原图像剪切为200×300大小的长方形,剪切后的图像可以部分重叠。