2017-02-14 1 views
1

Я пытаюсь прочитать 16-битное изображение TIFF (26446 x 16688) в Python. Использование OpenCV читает только черное изображение (все интенсивности чтений 0) путем:OpenCV - Чтение 16-битного изображения TIFF в Python (данные дозорного-1)

self.img = cv2.imread(self.filename, cv2.IMREAD_UNCHANGED) 

Может OpenCV обрабатывать 16 бит или большие изображения (~ 840mb)? Любое обходное решение?

EDIT: также cv2.imshow("output", self.img[0:600]) отображает черное изображение.

+0

Просто подсказка ... попробуйте запустить ** команду InageMagick ** 'ident' для проверки минимального/максимального/среднего количества каталогов в вашем TIFF. Он установлен на большинстве Linux. Вы хотите «define -verbose YourImage.tif» –

+0

У меня меньше 16-битных файлов TIFF, и они работают нормально (они даже отображаются корректно в 'imshow', хотя, вероятно, усечены до 8-бит -' 34067, 34983, 35287]] , dtype = uint16) '- так заканчивается мое изображение (137, 137, 137 при загрузке без' cv2.IMREAD_UNCHANGED'). Возможно, вы загружаете черный снимок, или фактический диапазон не совсем соответствует 16-разрядному (например, 12 бит, а сдвиг на 8 бит дает в основном нули). Это либо размер изображений, либо он работает правильно - попробуйте перемножить свое изображение с помощью некоторой силы 2 или нормализовать его (растянуть контрастность) перед отображением. Или первые 600 строк ARE черные ... –

ответ

0

Как предложил Эндрю Пакссон, можно использовать другую библиотеку. Существует библиотека, предназначенная исключительно для игры с изображениями tiff.

Используйте этот код для того же самого. Убедитесь, что в вашей системе установлено tif.

import tifffile as tiff 
import matplotlib.pyplot as plt 

filename = 'Image.tif' 
img = tiff.imread(filename) 
plt.imshow(img) 
Смежные вопросы