Обрезать все изображение с таким же размером обрезки с PIL в Python - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть некоторые проблемы с моей логикой на питоне PIL.Моя цель - обрезать одно изображение полностью размером 64x64 от левого верхнего угла до нижнего правого угла.Я могу выполнить операцию обрезки один раз, но когда я попытался полностью обрезать изображение с помощью цикла, я застрял с циклом в середине.

В первом цикле я могу обрезать ((0, 0, 64, 64)).Но тогда я не могу изобразить циклическую часть, чтобы получить следующие 64x64 слева и снизу с помощью PIL.Поскольку первый 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

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете использовать функцию 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

Кроме этого, вашкод работает как положено.

...