放大图像(可能是像素化但不会模糊)

时间:2018-11-06 11:59:17

标签: python

我写了一个脚本来绘制一些图像,通常不大于50x50px。然后,我想在Tkinter窗口中显示该图像。但是首先我需要放大图像,因为30x30px太小了,以至于用户看不到脚本生成的每个像素。所以我写了这个:

multiplier = 4
image = np.full((height * multiplier, width * multiplier, 3), 0, dtype=np.uint8)

for r in range(height):
    for c in range(width):
        for i in range(multiplier):
            for j in range(multiplier):
                image[r * multiplier + i][c * multiplier + j] = original[r][c]

P.S。 原始的初始化方式与图像

相同

我也尝试过:

  

resize((width * multiplier,height * multiplier),Image.ANTIALIAS)

但这不是一个选择,因为它会使图像看起来模糊。那么什么是更好的解决方案?

示例图片: enter image description here

2 个答案:

答案 0 :(得分:3)

我建议使用“最近邻”重采样来调整大小,这样您就不会引入任何新的,模糊的颜色-只是图像中已经存在的颜色:

import numpy as np
from PIL import Image

im = Image.open("snake.png").convert('RGB')
im = im.resize((200,200),resample=Image.NEAREST)
im.save("result.png")

enter image description here

您可以使用以下方法将枕头图像转换为numpy数组:

numpy_array = np.array(pillowImage)

,从numpy数组到具有以下内容的枕头图像:

pillow_image = Image.fromarray(numpyArray)

答案 1 :(得分:0)

您可以使用PIL.Image / openCV和PIL.ImageFilter模块:

from PIL import Image, ImageFilter
import cv2

image = cv2.resize(image, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
image = Image.fromarray(image)

在这里,fxfy是您必须自行设置的值。希望这会有所帮助:)