如何在循环中实现以下代码



我正在编写一些代码,将一个图像沿着3x3网格模式分离为多个较小的图像。为了做到这一点,我显式地分配每个"网格单元"的四个角坐标中的每一个,以便它们可以在PIL.image.crop((中使用。有没有一种简单的方法可以在循环中实现这段代码?

from math import floor
import matplotlib.pyplot as plt
height = 75
width = 75
numRows = 5
numCols = 5
numVertLines = numRows+1
numHorLines  = numCols+1
xcoords = []
ycoords = []
grid4coords = []
colIncrement = floor(width/numCols)
rowIncrement = floor(height/numRows)
print("Incremementing columns by", colIncrement, "pixels")
print("Incrementing rows by", rowIncrement, "pixels")
for i in range(0, (height+1), rowIncrement):    #start from (0,0), increment by rowIncrement until reached 
xcoords.append(i)
for j in range(0, (width+1), colIncrement): #start from (0,0), increment by colIncrement until reached right
ycoords.append(j)

print("xcoords:",xcoords)
print("ycoords",ycoords)
################################## row 1 grid coords
TL11 = [xcoords[0], ycoords[0]]
TR11 = [xcoords[1], ycoords[0]]
BL11 = [xcoords[0], ycoords[1]]
BR11 = [xcoords[1], ycoords[1]]
TL12 = [xcoords[1], ycoords[0]]
TR12 = [xcoords[2], ycoords[0]]
BL12 = [xcoords[1], ycoords[1]]
BR12 = [xcoords[2], ycoords[1]]
TL13 = [xcoords[2], ycoords[0]]
TR13 = [xcoords[3], ycoords[0]]
BL13 = [xcoords[2], ycoords[1]]
BR13 = [xcoords[3], ycoords[1]]

################################ row 2 grid coords
TL21 = [xcoords[0], ycoords[1]]
TR21 = [xcoords[1], ycoords[1]]
BL21 = [xcoords[0], ycoords[2]]
BR21 = [xcoords[1], ycoords[2]]
TL22 = [xcoords[1], ycoords[1]]
TR22 = [xcoords[2], ycoords[1]]
BL22 = [xcoords[1], ycoords[2]]
BR22 = [xcoords[2], ycoords[2]]
TL23 = [xcoords[2], ycoords[1]]
TR23 = [xcoords[3], ycoords[1]]
BL23 = [xcoords[2], ycoords[2]]
BR23 = [xcoords[3], ycoords[2]]
################################ row 3 grid coords
TL31 = [xcoords[0], ycoords[2]]
TR31 = [xcoords[1], ycoords[2]]
BL31 = [xcoords[0], ycoords[3]]
BR31 = [xcoords[1], ycoords[3]]
TL32 = [xcoords[1], ycoords[2]]
TR32 = [xcoords[2], ycoords[2]]
BL32 = [xcoords[1], ycoords[3]]
BR32 = [xcoords[2], ycoords[3]]
TL33 = [xcoords[2], ycoords[2]]
TR33 = [xcoords[3], ycoords[2]]
BL33 = [xcoords[2], ycoords[3]]
BR33 = [xcoords[3], ycoords[3]]

每个坐标列表中的每个元素都对应于网格单元的编号,从左到右、从上到下进行编号(与您阅读书籍的方式相同(。代码显示前两个裁剪的单元格。

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 14 11:39:07 2022
@author: nickr
"""
from math import floor
import matplotlib.pyplot as plt
from PIL import Image
im = Image.open("C:/Users/nickr/Desktop/right.png")
width = im.size[0]
height = im.size[1]

print('width: ',width)
print('heigt',height)
numRows = 16
numCols = 11
xcoords = []
ycoords = []
grid4coords = []
colIncrement = floor(width/numCols)
rowIncrement = floor(height/numRows)

print("Incremementing columns by", colIncrement, "pixels")
print("Incrementing rows by", rowIncrement, "pixels")
for i in range(0, (height+1), rowIncrement):    #start from (0,0), increment by rowIncrement until reached 
xcoords.append(i)
for j in range(0, (width+1), colIncrement): #start from (0,0), increment by colIncrement until reached right
ycoords.append(j)

print("xcoords:",xcoords)
print("ycoords",ycoords)
leftcoords = []
rightcoords = []
uppercoords = []
lowercoords = []
for i in range(numCols):
for j in range(0, width-colIncrement ,colIncrement):
leftcoords.append(j)
for k in range(colIncrement, width, colIncrement):
rightcoords.append(k)
for x in range(0, height, rowIncrement):
for y in range(numCols):
uppercoords.append(x)
lowercoords.append(x+rowIncrement)


print('leftcoords: ',leftcoords)
print('')        
print('rightcoords: ',rightcoords)
print('')
print('uppercoords: ',uppercoords)
print('')        
print('lowercoords: ',lowercoords)
im1 = im.crop((leftcoords[0], uppercoords[0], rightcoords[0], lowercoords[0])) #gives top left grid cell
im2 = im.crop((leftcoords[1], uppercoords[1], rightcoords[1], lowercoords[1])) #gives grid cell to the right of ^that one
im1.show()
im2.show()

最新更新