如何调整图像大小,但保持图像中的功能?python

2024-04-25 20:53:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的图像:enter image description here

    array.resize(20,20,3)

    img = Image.fromarray(array, 'RGB')
    img.save('my.png',quality=90)

    img.show()

它目前是一个500x500x3 NumPy阵列。底层空间是一个20x20单元格网格,我想调整图像大小,使每个网格单元格在20x20x3 NumPy数组中具有与其RGB值相对应的条目,而不是(500/20)*(500/20)*每个单元格3个条目

不幸的是,上面的代码似乎不起作用,因为它似乎为每个单元格提供了比我预期的更多的条目,尽管我不是100%确定


Tags: 图像imagenumpy网格imgpngmysave
2条回答

试试这个

size = 20, 20
img = Image.fromarray(array, 'RGB')
img.thumbnail(size, Image.ANTIALIAS)
img.save('my.png',quality=90)

img.show()    

要使用pillow调整图像大小,可以使用Image.resize()

from PIL import Image
import urllib.request
import numpy as np

data = urllib.request.urlopen('https://i.stack.imgur.com/7bPlZ.png')
old_img = Image.open(data)

new_img = old_img.resize((20, 20))
new_img.save('my.png',quality=90)
new_img.show()

array = np.array(new_img)

print(array)

但调整图像大小可以创建半色调的像素

也许您应该直接从numpy.array获取值。您可以使用纯色,这样就可以从每个单元格中获得单个像素-因为每个单元格都有大小25x25,所以可以是:

new_array = old_array[::25,::25,:]

然后你就不必转换成图像了

如果您将这个数组转换为图像,那么它应该比使用Image.resize创建的数组更清晰

enter image description here

from PIL import Image
import urllib.request
import numpy as np

data = urllib.request.urlopen('https://i.stack.imgur.com/7bPlZ.png')
old_img = Image.open(data)

old_array = np.array(old_img)

new_array = array[::25,::25,:]

print(new_array)

new_img = Image.fromarray(new_array)
new_img.save('my.png',quality=90)
new_img.show()

相关问题 更多 >