簡體   English   中英

為什么我的平鋪圖像會隨着粘貼到 Pillow 中而移動?

[英]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')

我附上了我在平鋪中處理的原始圖像和輸出圖像的當前狀態: 原始預處理圖像 處理輸出

在文件夾 recolored_tiles 中找到的圖塊示例: 在此處輸入圖片說明

首先,下面的代碼將創建正確的圖像:

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.

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