[英]How can I implement the following code in a loop?
我正在編寫一些代碼以將圖像沿 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.