- 深度图float32转uint16类型
python+opencv
cv2.imread读完图的结果其实就是ndarry类型的,所以可以直接用numpy的一些函数来操作。
import numpy as np
import cv2
res_im = cv2.imread(imgpath,-1)
trans_im = res_im.astype(np.uint16)
cv2.imwrite(imgpath,trans_im)
np.astypy()使用示例:
#示例
a = np.array((257,),dtype=np.uint16)
print('=================before convert==================')
print(a.dtype)
print(a)
print('=================after convert==================')
c = a.astype(np.uint8)
print(c.dtype)
print(c)
结果
=================before convert==================
uint16
[257]
=================after convert==================
uint8
[1]
注意:
- astype使用过程中不会发生数值变化(也即不会进行线性拉伸),但是会出现精度丢失
- 当出现数值范围溢出的时,结果会不可控。因此,一定要避免这种情况的出现
- 该转换是非就地操作,原始数组不会发生改变。如果想实现就地操作,应该给原始数组赋值:a = a.astype(np.uint8)
numpy支持的数据类型: