Я пытаюсь сохранить / показать 16-битный массив numpy (как изображение) в opencv с cmap, он не работает. С другой стороны, в matplotlib все работает гладко.
Моя модель глубокого обучения дает массив numpy arr
(<class 'numpy.ndarray'>
). Вы можете получить его из здесь .
# np array predicted from a depth model
>>> arr16 = np.load('pred_depth_scale.npy')
>>> arr16.dtype, arr16.shape
(dtype('uint16'), (466, 492))
>>> cv2.imshow('img', arr16)
# shows image in grayscale

Я хочу преобразовать его в другую цветовую карту:
>>> arr16 = cv2.applyColorMap(arr16, cv2.COLORMAP_COOL)
Выдает следующую ошибку:
ошибка: OpenCV (4.1.0) /io/opencv/modules/imgproc/src/colormap.cpp:684: ошибка: ( -5: неверный аргумент) cv :: ColorMap поддерживает только исходные изображения типа CV_8UC1 или CV_8UC3 в функции 'operator ()'
Теперь, если я преобразую изображение в uint8
, изображение содержит шум.
>>> arr8 = arr16.astype(np.uint8)
>>> arr8 = cv2.applyColorMap(arr8, cv2.COLORMAP_COOL)
>>> cv2.imshow('img', arr8)

С другой стороны, с matplotlib, cmap
отлично работает следующим образом:
>>> plt.imshow(arr16, cmap='magma')

Мой вопрос : Как сохранить / показать 16-битное изображение в opencv с помощью cmap?