使用python中的PIL以相同的裁剪大小裁剪整个图像

2024-04-24 05:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我对PIL python的逻辑有点问题。我的目标是裁剪一个64x64大小的图像,从左上角到右下角位置。我可以做一次裁剪操作,但当我试图裁剪一个完整的图像循环,我被困在中间的循环情况。在

在第一个循环中,我可以裁剪((0,0,64,64))。但我无法计算循环部分,以获得下一个64x64s的左边和底部与皮尔。由于第一个2元组是原点位置点,下一个元组用于裁剪大小。在

在我开始学习python时,任何帮助都将非常感谢。在

import os
from PIL import Image

savedir = "E:/Cropped/OK"
filename = "E:/Cropped/dog.jpg"
img = Image.open(filename)
width, height = img.size

start_pos = start_x, start_y = (0,0)  
cropped_image_size = w, h = (64, 64) 

frame_num = 1
for col_i in range (width):
    for row_i in range (height):
        x = start_x + col_i*w
        y = start_y + row_i*h
        crop = img.crop((x, y, x+w*row_i, y+h*col_i))
        save_to= os.path.join(savedir, "counter_{:03}.jpg")
        crop.save(save_to.format(frame_num))
        frame_num += 1

Tags: 图像cropimageimportimgpilossave
1条回答
网友
1楼 · 发布于 2024-04-24 05:47:48

您可以使用range()函数为您执行步进操作(在本例中为64个块),这样裁剪只涉及简单的表达式:

import os
from PIL import Image

savedir = "E:/Cropped/OK"
filename = "E:/Cropped/dog.jpg"
img = Image.open(filename)
width, height = img.size

start_pos = start_x, start_y = (0, 0)
cropped_image_size = w, h = (64, 64)

frame_num = 1
for col_i in range(0, width, w):
    for row_i in range(0, height, h):
        crop = img.crop((col_i, row_i, col_i + w, row_i + h))
        save_to= os.path.join(savedir, "counter_{:03}.jpg")
        crop.save(save_to.format(frame_num))
        frame_num += 1

除此之外,您的代码按预期工作。在

相关问题 更多 >