python - 在python中使用PIL以相同的裁剪尺寸裁剪整个图像

标签 python image python-imaging-library

我在 PIL python 上的逻辑有一些问题。我的目标是从左上角到右下角位置完全裁剪一张 64x64 大小的图像。我可以进行一次裁剪操作,但是当我尝试通过循环完全裁剪图像时,我被中间的循环情况卡住了。

在第一个循环中,我可以裁剪 ((0, 0, 64, 64))。但随后我无法使用 PIL 计算循环部分以将下一个 64x64 移至左侧和底部。由于第一个二元组是原点位置点,下一个元组用于裁剪尺寸。

当我开始学习 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

最佳答案

您可以使用 range() 函数为您执行步进(在本例中以 64 个 block 为单位),以便您的裁剪仅涉及简单的表达式:

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

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

关于python - 在python中使用PIL以相同的裁剪尺寸裁剪整个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53501331/

相关文章:

python - python-pillow 中内核大小大于 5x5 的卷积

python - 在 Google App Engine 中将二进制文件转换为 PIL Image 数据类型

python - 根据 pandas DataFrame 中的最后 N 行比较两列

python - LAN 上的服务器/客户端应用程序超时错误

python - 从 PIL(Python 图像库)中的文件路径创建缩略图时如何修复这些错误

java - OpenCV Java - 如何裁剪图像中检测到的圆圈

javascript - onLoad 返回 0 作为宽度和高度

Python:如何以特定格式将数据写入文件?

python - uWSGI/Flask/Python 日志在一段时间后停止

javascript - 调整图像大小后在 div 内放大图像