Если вы конвертируете ваше изображение из float32 в uint8 numpy
и opencv
в python, вы можете использовать два удобных подхода.
Если вы знаете, что ваше изображение имеет диапазон от 0 до 255 или от 0 до 1, тогда вы можете просто выполнить преобразование так, как вы это уже делаете:
I *= 255 # or any coefficient
I = I.astype(np.uint8)
Если вы не знаете диапазон, я предлагаю вам применить минимальную максимальную нормализацию
т.е.: (value - min) / (max - min)
opencv уже реализовал:
I = cv2.normalize(I,None,0,255,cv2.NORM_MINMAX,cv2.CV_8U)
Возвращенный I уже будет иметь тип np.uint8
и диапазон от 0 до 255
Используя numpy
, вы также можете написать что-то похожее:
def norm8(I):
mn = I.min()
mx = I.max()
mx -= mn
I = (I - mn)/mx
return I.astype(np.uint8)