使用opencv实现16位图转8位图

  • Post author:
  • Post category:其他


最近在处理一批.tif格式的数据,但是由于设备导出的数据是16位图,因此一般图片查看器打开都是一片黑,如下图所示:

在这里插入图片描述

因此需要把数据转换成8位图,方便查看。此处采用的转换方案是用opencv库来实现

cv2.imread(filepath,flags)

参数说明:filepath:要读入图片的完整路径
         flags:读入图片的标志
         
flags标志说明:
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用-1作为实参替代

alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明。

python代码如下:

img_path = '../uint16_img.tif'
uint16_img = cv2.imread(img_path , -1)
uint16_img -= uint16_img.min()
uint16_img = uint16_img / (uint16_img.max() - uint16_img.min())
uint16_img *= 255
new_uint8_img = uint16_img.astype(np.uint8)
cv2.imwrite('../new_uint8_img.png', new_uint8_img)

转换结果如下:

在这里插入图片描述