Изображения имеют тип uint8 и 48 x 48 пикселей в форме.Следовательно, imshow
в matplotlib будет отображать их с активной картой цветов (plt.gray()
).Нормализация цветовой карты выбирается в соответствии с минимумом и максимумом данных.Это становится ясным при построении с цветовой шкалой.
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
fig, (ax, ax2) = plt.subplots(ncols=2)
plt.gray()
im1 = ax.imshow(img)
fig.colorbar(im1, ax=ax)
im2 = ax2.imshow(img_o)
fig.colorbar(im2, ax=ax2)
plt.show()
![enter image description here](https://i.stack.imgur.com/vihRT.png)
Из этого мы видим, что для первого изображения белый цвет обозначает значение 70, адля второго белого - 218. Чтобы использовать одинаковую нормализацию в обоих случаях и для соответствия 8-битным изображениям, можно использовать norm = plt.Normalize(0,255)
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
norm = plt.Normalize(0,255)
fig, (ax, ax2) = plt.subplots(ncols=2)
plt.gray()
im1 = ax.imshow(img, norm=norm)
fig.colorbar(im1, ax=ax)
im2 = ax2.imshow(img_o, norm=norm)
fig.colorbar(im2, ax=ax2)
plt.show()
![enter image description here](https://i.stack.imgur.com/XONBa.png)
В качестве альтернативы, вы можете дублировать значения серого на все три канала RGB, так что вы строите массив пикселей 48x48x3.Это будет интерпретировано как изображение (в отличие от цветных данных) и будет отображаться правильно.
import numpy as np
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
img_o = np.dstack((img_o,img_o,img_o))
img = np.dstack((img,img,img))
fig, (ax, ax2) = plt.subplots(ncols=2)
im1 = ax.imshow(img)
im2 = ax2.imshow(img_o)
plt.show()
![enter image description here](https://i.stack.imgur.com/AxguJ.png)