我想使用openCV库在Python中将float32
图像转换为uint8
图像。我使用了以下代码,但我不知道它是否正确。
这里I
是float32
图像。
J = I*255
J = J.astype(np.uint8)
如果你能帮我,我真的很感激。
如果您想将图像从单精度浮点(即float32(转换为uint8,python中的numpy
和opencv
提供了两种方便的方法。
如果你知道你的图像的范围在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)