如何将图像从np.uint16转换为np.uint8?

时间:2012-07-05 03:23:37

标签: python opencv numpy

我正在创建一个图像:

image = np.empty(shape=(height, width, 1), dtype = np.uint16)

之后我将图像转换为BGR模型:

image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)

我想现在在dtype = np.uint8转换图片,以便将该图片与cv2.threshold()功能一起使用。我的意思是,我想将图片转换为CV_8UC1

2 个答案:

答案 0 :(得分:26)

您可以使用cv2.convertScaleAbs解决此问题。请参阅Documentation.

查看下面的命令终端演示:

>>> img = np.empty((100,100,1),dtype = np.uint16)
>>> image = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

>>> cvuint8 = cv2.convertScaleAbs(image)

>>> cvuint8.dtype
dtype('uint8')

希望它有所帮助!!!

答案 1 :(得分:7)

我建议你使用它:

outputImg8U = cv2.convertScaleAbs(inputImg16U, alpha=(255.0/65535.0))

这将输出uint8图像&指定0-255之间的值,相对于0-65535之间的先前值

exemple :
pixel with value == 65535 will output with value 255 
pixel with value == 1300 will output with value 5 etc...