Я пытаюсь нанести изображение с некоторыми объектами (например, точками, осями и т. Д.). Для этого я использую библиотеку matplotlib.pyplot
. Вот (уменьшенный) код, который я использую:
fig = plt.figure(figsize=(18, 18))
ax = fig.add_subplot(111)
img = plt.imread(stim_dir + image_name)
ax.imshow(img, extent=[-np.pi, np.pi, -np.pi / 2, np.pi / 2])
ax.scatter(*zip(*points), marker='^', s=1, c='red', alpha=0.4)
plt.xlim((-np.pi, np.pi))
plt.title(file_name)
plt.show()
Теперь код работает нормально, когда я использую изображение в формате png, все идеально и все. Но у меня также есть bmp для построения, и там он не работает, не может прочитать растровое изображение, но не беспокойтесь, я могу преобразовать его в png! Однако эти новые png-изображения тоже не работают, и я получаю сообщение об ошибке: MemoryError: Unable to allocate array with shape (3600, 7200, 4) and data type float32
.
Итак, я печатаю форму исходного png-изображения, которая работала нормально, чтобы увидеть разницу (и):
>>> print(img.shape)
(2160, 4320, 3)
Я предполагаю, что третье измерение должно быть 3 (для RGB) вместо 4 (которое может быть ARGB), поэтому я печатаю массив img с «новым» неработающим изображением, котороедает мне что-то вроде:
[[[0.46666667 0.46666667 0.46666667 1. ]
[0.46666667 0.46666667 0.46666667 1. ]
[0.46666667 0.46666667 0.46666667 1. ]
...
Я вижу после проверки, что каждое четвертое число равно 1, так что это аккуратно, я просто должен удалить его, он не несет важную информацию! Я использую img = np.delete(img, 3, 2)
, и он работает хорошо, я получаю новую форму (3600, 7200, 3)
со значениями каждого пикселя, как я хочу. Тем не менее, он все еще не работает, и STILL дает мне ту же ошибку, что и раньше: MemoryError: Unable to allocate array with shape (3600, 7200, 4) and data type float32
, похоже, что он не принимает новый массив img ... (Очевидно, я делаю удаление сразу после инструкции img = plt.imread(stim_dir + image_name)
).
Итак, я что-то упускаю из виду? Что я мог сделать, чтобы это работало?