簡體   English   中英

如何在循環中實現以下代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM