Как изменить размер изображения, но сохранить его функции? Python - PullRequest
0 голосов
/ 04 марта 2020

У меня есть изображение, которое выглядит так: 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%.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Чтобы изменить размер изображения с помощью 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. У вас есть solid цветов, чтобы вы могли получить один пиксель из каждой ячейки - потому что каждая ячейка имеет размер 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()
0 голосов
/ 04 марта 2020

Попробуйте это

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

img.show()    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...