подушка: почему режим «1» дает странное изображение? - PullRequest
0 голосов
/ 25 июня 2019

вдохновленный этим постом (постройте изображение из массива с подушкой.)

Я пробовал это

diamond = np.array([[  0,   0,   0,   0, 255,   0,   0,   0,   0],
       [  0,   0,   0, 255,   0, 255,   0,   0,   0],
       [  0,   0, 255,   0,   0,   0, 255,   0,   0],
       [  0, 255,   0,   0,   0,   0,   0, 255,   0],
       [255,   0,   0,   0,   0,   0,   0,   0, 255],
       [  0, 255,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0, 255,   0,   0,   0, 255,   0,   0],
       [  0,   0,   0, 255,   0, 255,   0,   0,   0],
       [  0,   0,   0,   0, 255,   0,   0,   0,   0]], dtype=uint8)

size = 36
my_dpi = mpl.rcParams['figure.dpi']
plt.subplots(figsize=(size/my_dpi, size/my_dpi))
plt.axis('off')
img = Image.fromarray(diamond, 'L')
img.resize((size,size)).save('diamond.ppm')
plt.imshow(img)

, пока все работает хорошо.

за документ «1» представляет (1-битные пиксели, черно-белые, сохраняются с одним пикселем на байт)

с использованием режима «1» для замены «L»"выводит это изображение

enter image description here

ожидаемый результат должен выглядеть следующим образом:

enter image description here

почему это?

1 Ответ

1 голос
/ 26 июня 2019

преобразование в режим 1 это обходной путь

size = 36
my_dpi = mpl.rcParams['figure.dpi']
plt.subplots(figsize=(size/my_dpi, size/my_dpi))
plt.axis('off')
img = Image.fromarray(diamond, 'L').convert('1')
img.resize((size,size)).save('diamond.ppm')
plt.imshow(img)
...