Установка libtiff в Windows (Anaconda) не дает рабочего пакета. Помогите пожалуйста - PullRequest
0 голосов
/ 10 мая 2018

У меня есть 16-битные данные, которые я хочу сохранить в сжатый файл TIFF, используя libtiff. Я думал, что он установит пакет с (ana) conda и покончит с этим, но безрезультатно. Miniconda находит, загружает и, кажется, устанавливает libtiff 4.0.9, но при попытке импортировать пакет не находит его.

Используя pip (pip install libtiff), я также установил pylibtiff 0.4.2, но при попытке использовать его для импорта libtiff получаю следующее:

Traceback (последний вызов был последним): Файл "", строка 1, в Файл "C: \ Prog \ Miniconda3 \ lib \ site-packages \ libtiff__init __. Py", строка 20, в из .libtiff_ctypes импорт libtiff, TIFF, TIFF3D Файл "C: \ Prog \ Miniconda3 \ lib \ site-packages \ libtiff \ libtiff_ctypes.py", строка 46, в поднять ImportError ('Не удалось найти библиотеку TIFF. Убедитесь, что libtiff' ImportError: Не удалось найти библиотеку TIFF. Убедитесь, что libtiff установлен> и его местоположение указано в PATH | LD_LIBRARY_PATH | ..

В моем каталоге \ pkgs в miniconda установлены двоичные файлы, но они, по-видимому, не обнаружены моей средой python, даже при добавлении каталога .dll (\Miniconda3\pkgs\libtiff-4.0.9-hb8ad9f9_1\Library\bin) в системный путь.

Как можно это исправить? Я пытался скачать исходный код Libtiff и собрать его под Windows (используя cmake и Visual Studio - безуспешно, так как мои навыки C-building очень просты).

Есть предложения?

1 Ответ

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

Во-первых, для решения поставленной задачи libtiff не требуется - достаточно scikit-image.Чтобы сделать вещи менее очевидными, метод skimage.io.imsave () по умолчанию предпочитает работать через PIL (обратите внимание, что для TIFF сделано исключение).Здесь это немного сложно, так как поддержка сжатых файлов TIFF в PIL либо нестабильна, либо требует libtiff.

По умолчанию пробуются разные плагины (начиная с библиотеки изображений Python), пока не будет найден подходящий кандидат.Если он не указан и fname является файлом формата tiff, будет использован плагин tifffile.

и

"Начиная с версии 5.0.0, Pillow требует, чтобы libtiff прочитал илизаписывать сжатые файлы. До этого выпуска у Подушки была глючная поддержка чтения сжатых TIFF-файлов Packbits, LZW и JPEG без использования libtiff. "

Во-вторых, если вам нужно использовать libtiff, не пытайтесь смешиватьпакеты conda и pip .Кажется, в моем случае они загрузили разные и несовместимые версии пакета.[Пакет conda устанавливает двоичные файлы libtiff, но не упаковщик для Python.Следовательно, импорт libtiff (как предполагает некоторая онлайн-документация) не работает, даже если библиотеки присутствуют]

Но вернемся к решению:

Scikit-изображение, однако, поставляется с внешниминструмент для сохранения файлов TIFF (с использованием сжатия ZIP или LZMA): skimage.external.tifffile.imsave () - см. http://scikit -image.org / docs / dev / api / skimage.external.tifffile.html

В заключение: вооружившись scikit-изображением, вы можете без потерь сохранять 16-битные файлы TIFF со сжатием Zip, используя следующую команду (показанную здесь со средним сжатием по алгоритму Zip):

skimage.external.tifffile.imsave("Compressed.tif", image, compress=5)
...