我应该如何将float32图像转换为uint8图像



我想使用openCV库在Python中将float32图像转换为uint8图像。我使用了以下代码,但我不知道它是否正确。

这里Ifloat32图像。

J = I*255
J = J.astype(np.uint8)

如果你能帮我,我真的很感激。

如果您想将图像从单精度浮点(即float32(转换为uint8,python中的numpyopencv提供了两种方便的方法。

如果你知道你的图像的范围在0到255之间,或者在0到1之间,那么你可以简单地按照你已经做的方式进行转换:

I *= 255 # or any coefficient
I = I.astype(np.uint8)

如果你不知道范围,我建议你应用最小-最大归一化即:(value - min) / (max - min)

使用opencv,您只需调用以下指令:

I = cv2.normalize(I, None, 255, 0, cv2.NORM_MINMAX, cv2.CV_8U)

返回的变量I类型的类型为np.uint8(由最后一个参数指定(,范围在0到255之间。

使用numpy,您也可以编写类似的内容:

def normalize8(I):
mn = I.min()
mx = I.max()
mx -= mn
I = ((I - mn)/mx) * 255
return I.astype(np.uint8)

它实际上非常简单:img_uint8 = img_float32.astype(np.uint8)

最新更新