Преобразование ndarray из float32 в uint8 портит изображение - PullRequest
0 голосов
/ 18 марта 2019

После этого блога Я пытаюсь применить тепловую карту к исходному изображению.

Однако у меня проблема с преобразованием float32 в uint8. Перед преобразованием в uint8, если я сохраню изображение с:

plt.imshow(heatmap)
plt.savefig(f'{directory}/heatmap.png', bbox_inches='tight', pad_inches=0.0)

выведет это изображение:

enter image description here

После строки heatmap = np.uint8(255 * heatmap) Я снова сохраняю изображение и получаю следующий вывод:

enter image description here

Форма изображения в обоих случаях (600, 600). Так как я могу получить 2-е изображение таким же, как 1-е после использования uint8?

1 Ответ

1 голос
/ 18 марта 2019

У вас есть только отрицательные значения в 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...