Откройте многоканальное изображение в Python OpenCV2

У меня есть 4-полосное многоканальное изображение (TIF), которое представляет собой 16-битное изображение без знака. Я использую следующее:

    opencv2 
    python 

Я сделал следующее в начале моего кода

    import cv2 

Когда я использую

  i = cv2.imread('img.tif') 

он читает все четыре диапазона, но как UINT8. Когда я использую

  i = cv2.imread('img.tif', cv2.CV_16U)

он читает только один канал изображения. Что нужно сделать, чтобы прочитать все четыре канала в 16-битном формате без знака?


person Indian    schedule 08.07.2013    source источник
comment
stackoverflow.com/a/9781142/749973   -  person Tae-Sung Shin    schedule 09.07.2013
comment
Спасибо за помощь, но я задал вопрос, связанный с Python!   -  person Indian    schedule 09.07.2013


Ответы (1)


Попробуйте передать флаг cv2.IMREAD_ANYDEPTH. В документации указано, что этот флаг будет:

Если установлено, вернуть 16-битное/32-битное изображение, когда входные данные имеют соответствующую глубину, в противном случае преобразовать его в 8-битное.

i = cv2.imread('img.tif', flags=cv2.IMREAD_ANYDEPTH)

Если это не сработает, попробуйте вместо этого флаг cv2.IMREAD_UNCHANGED. Это не задокументировано, но похоже, что это тоже может работать.

person Aurelius    schedule 08.07.2013
comment
Нет, это не работает. Мое изображение загружается, но только один канал! Я проверил это с помощью Matlab, где мое изображение загружается как канал UINT16/4. - person Indian; 09.07.2013
comment
Похоже, что GDAL из osgeo работает лучше с точки зрения чтения изображений. - person Indian; 09.07.2013
comment
@Indian Вы пробовали флаг IMREAD_UNCHANGED? Меня устраивает. - person Aurelius; 10.07.2013