Как я могу изменить форму массива с (280, 280, 3) на (28, 28, 3)
Привет, я попытался написать код, в котором я пишу число на экране с помощью pygame, а затем нейронная сеть предсказывает написанное мной число. Моя проблема в том, что я обучил свою нейронную сеть с массивами изображений в (28, 28, 3). Итак, я попытался изменить форму моего массива (280, 280, 3). но когда я это сделаю, мой массив - None. Я использую Python 3.7
string_image = pygame.image.tostring(screen, 'RGB')
temp_surf = pygame.image.fromstring(string_image, (280, 280), 'RGB')
array = pygame.surfarray.array3d(temp_surf)
array = array.resize((28, 28, 3))
Кто-нибудь может помочь?
2 ответа
Если вы просто хотите масштабировать pygame.Surface
, то рекомендую использовать pygame.transform.scale()
или pygame.transform.smoothscale()
.
Например:
temp_surf = pygame.image.fromstring(string_image, (280, 280), 'RGB')
scaled_surf = pygame.transform.smoothscale(temp_surf, (28, 28))
array = pygame.surfarray.array3d(scaled_surf)
Я не знаком с pygame
но похоже pygame.surfarray.array3d
возвращает numpy
-массив.
Чтобы сохранить то же количество точек данных и просто изменить форму, вы можете использовать numpy.reshape
.
import numpy as np
c = 28*28*3 # just to start off with right amount of data
a = np.arange(c) # this just creates the initial data you want to format
b = a.reshape((28,28,3)) # this actually reshapes the data
d = b.shape #this just stores the new shape in variable d
print(d) #shows you the new shape
Чтобы интерполировать данные до нового размера, есть несколько способов, например CV или продолжение numpy
пример.
ary = np.resize(b,(18,18,1))
e = ary.shape
print(e)
Надеюсь, это поможет.