Это немного сбивает с толку из-за порядка размеров, различающихся между Numpy и PIL.
Изображение в PIL имеет размер (width, height)
Однако массив Numpy, представляющий изображение, имеет форму (height, width)
.
Следующий фрагмент иллюстрирует это:
import numpy as np
from numpy import random
from PIL import Image
import matplotlib.pyplot as plt
random.seed()
xn = random.randint(0, 255, (539,20), dtype=np.uint8)
im = Image.fromarray(xn)
print(im.size)
plt.imshow(im, cmap='gray', vmin=0, vmax=255)
plt.show()
Таким образом, при вызове Image.fromarray(xn)
вы получите изображение шириной 20 x 539.
Теперь Image.fromarray(xn).resize((200, xn.shape[1]))
- это изображение шириной 200 x 20, полученное путем сжатия исходной высоты 539 до 20 и растяжения исходной ширины 20 до 200.
Если вы хотите сохранить исходную 20 Чтобы уменьшить ширину 539 до 200, нужно сделать следующее:
Image.fromarray(xn).resize((xn.shape[1], 200))
Для контраста scipy.misc.imresize(xn, (200, 20))
возвращает массив с формой (200, 20)
, как описано в документации:
размер: int, float или tuple
int - процент от текущего размера.
float - доля от текущего размера .
tuple - Размер выходного изображения (высота, ширина) .