Как отобразить 16-битное изображение с интенсивностью 4096 в Python openCV? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть изображения, закодированные в 16-битном формате TIF.Они используют вариант глубины цвета 16 бит, где максимальная интенсивность равна 4096.

Я считаю, что максимальная интенсивность по умолчанию в openCV составляет 65 536, поэтому мое изображение отображается черным с использованием следующего кода.

import cv2

image = cv2.imread("test.tif", -1)

cv2.imshow('tiff', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(image)

enter image description here

Я могу использовать vmin и vmax в matplotlib для настройки цветового отображения:

import cv2
import matplotlib.pyplot as plt 

image = cv2.imread("test.tif", -1)
plt.imshow(image, cmap="gray", vmin=0, vmax=4096)
plt.show()

Этопоказывает содержимое изображения:

enter image description here

Причина, по которой я хочу придерживаться openCV, заключается в том, что matplotlib не поддерживает отображение 16-битного RGBimages.

Документация из cv2.imshow не очень полезна.Существуют ли способы отображения 16-битных изображений с интенсивностью 4096 в Python openCV?

Тестовое изображение test.tif можно найти здесь .

1 Ответ

0 голосов
/ 30 мая 2018

Вы хотите использовать cv2.normalize() для масштабирования изображения перед его отображением.

Вы можете установить минимальное / максимальное значения изображения, и оно будет соответствующим образом масштабировать изображение (путем перемещения минимального значения изображения до alpha и максимального значения изображения до beta).Предположим, что ваш img уже является uint16:

img_scaled = cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)

И тогда вы можете просматривать как обычно.

По умолчанию cv2.normalize() приведет к изображению того же типа, что иваше входное изображение, поэтому, если вы хотите получить 16-битный результат без знака, ваш ввод должен быть uint16.


Опять же, обратите внимание, что это линейно расширяет диапазон вашего изображения - если ваше изображение никогда не достигнет 0 и скажет, что самое низкое значение было 100, то после нормализации это самое низкое значение будет тем, что вы установили alpha к.Если вы не хотите этого, как предполагает один из комментариев, вы можете просто умножить свое изображение на 16, поскольку в настоящее время оно увеличивается только до 4095. С * 16 оно возрастет до 65535.

...