Как преобразовать изображение из np.uint16 в np.uint8?

Я создаю изображение так:

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.

Ответ 1

Вы можете использовать cv2.convertScaleAbs для этой проблемы. См. Документацию .

Проверьте демонстрацию командной строки ниже:

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

>>> cvuint8 = cv2.convertScaleAbs(image)

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

Надеюсь, это поможет!!!

Ответ 2

Я предлагаю вам использовать это:

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...