#python #numpy
#python #numpy
Вопрос:
После этого блога я пытаюсь применить тепловую карту к исходному изображению.
Однако у меня проблема с преобразованием float32 в uint8. Перед преобразованием в uint8, если я сохраню изображение с:
plt.imshow(heatmap)
plt.savefig(f'{directory}/heatmap.png', bbox_inches='tight', pad_inches=0.0)
выведет это изображение:
После строки heatmap = np.uint8(255 * heatmap)
я снова сохраняю изображение и получаю следующий вывод:
Форма изображения в обоих случаях (600, 600)
. Итак, как я могу сделать, чтобы 2-е изображение было таким же, как 1-е после использования uint8?
Комментарии:
1. Когда я пытаюсь это сделать, все работает нормально. Можете ли вы опубликовать полный код, который вы использовали?
2. Забавно, что после вашего комментария я попробовал это на np.random.rand (32, 32), и все сработало нормально. Однако я сбросил свой ndarray в файл .npy, где я получаю те же результаты. Ссылка: ufile.io/gq308 »
Ответ №1:
У вас есть только отрицательные значения в heatmap
. Поскольку uint8
может содержать числа только между 0
и 255
, строка heatmap = np.uint8(255 * heatmap)
будет работать так, как задумано, только если исходные значения heatmap
лежат между 0.
и 1.
.
Решение:
Измените масштаб массива до диапазона [0,255]
перед приведением его к uint8
:
heatmap = np.uint8(np.interp(heatmap, (heatmap.min(), heatmap.max()), (0, 255)))