[英]Why is my tiled image shifted with pasting into Pillow?
我正在編寫一個程序,我將圖像切成許多子圖塊,處理圖塊,然后將它們拼接在一起。 我卡在縫合部分。 當我運行我的代碼時,在第一行之后,每個圖塊移動一個空格。 我正在使用 1000x1000 的圖塊,圖像大小可以是可變的。 我也得到了這個丑陋的水平填充,我不知道如何擺脫。 這是圖像的谷歌驅動器鏈接: https : //drive.google.com/drive/folders/1HqRl29YlWUrsYoZP88TAztJe9uwgP5PS?usp=sharing
基於評論的澄清
我將原始的黑白圖像裁剪成 1000px x 1000px 的黑白圖塊。 然后將這些圖塊重新着色,用與密度熱圖對應的顏色替換白色。 然后將重新着色的圖塊保存到該文件夾中。 我包含的圖片是我試圖拼湊在一起的彩色瓷磚之一。 當拼湊在一起時,它應該是黑白圖像的相同形狀但多色版本
from PIL import Image
import os
stitched_image = Image.new('RGB', (large_image.width, large_image.height))
image_list = os.listdir('recolored_tiles')
current_tile = 0
for i in range(0, large_image.height, 1000):
for j in range(0, large_image.width, 1000):
p = Image.open(f'recolored_tiles/{image_list[current_tile]}')
stitched_image.paste(p, (j, i), 0)
current_tile += 1
stitched_image.save('test.png')
首先,下面的代碼將創建正確的圖像:
from PIL import Image
import os
stitched_image = Image.new('RGB', (original_image_width, original_image_height))
image_list = os.listdir('recolored_tiles')
current_tile = 0
for y in range(0, original_image_height - 1, 894):
for x in range(0, original_image_width - 1, 1008):
tile_image = Image.open(f'recolored_tiles/{image_list[current_tile]}')
print("x: {0} y: {1}".format(x, y))
stitched_image.paste(tile_image, (x, y), 0)
current_tile += 1
stitched_image.save('test.png')
解釋
首先,您應該注意到,您的圖塊不是 1000x1000。 它們都是 1008x984,因為 18145x16074 不能分成 19 個 1000x1000 的圖塊。
因此,您必須在 for 循環中放置正確的平鋪寬度和高度:
for y in range(0, 16074, INSERT CURRECT RECOLORED_TILE HEIGHT HERE):
for x in range(0, 18145, INSERT CURRECT RECOLORED_TILE WIDTH HERE):
其次,python range 是如何工作的,它不會在最后一位數字上運行。 表示:
for i in range(0,5):
print(i)
輸出將是:
0
1
2
3
4
因此,原始圖像的寬度和高度必須減去 1,因為它認為您有 19 個圖塊,但實際上沒有。
希望這行得通,你正在做一個多么酷的項目:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.