Чтение плиточных изображений с PyLibtiff - PullRequest
1 голос
/ 02 апреля 2012

Я недавно скачал и установил PyLibTIFF из здесь и пытался читать мозаичные изображения.

Я могу отлично прочитать отсканированные изображения, но, похоже, даже не могу найти правильныйФункция для чтения плитки.Я перебрал весь каталог libtif в своей папке пакетов сайта python и не нашел никакой команды "read_tile".

Я в основном пытаюсь транскодировать из этого примера :

TIFF* tif = TIFFOpen("myfile.tif", "r");
if (tif) {
uint32 imageWidth, imageLength;
uint32 tileWidth, tileLength;
uint32 x, y;
tdata_t buf;

TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imageWidth);
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageLength);
TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tileWidth);
TIFFGetField(tif, TIFFTAG_TILELENGTH, &tileLength);
buf = _TIFFmalloc(TIFFTileSize(tif));
for (y = 0; y < imageLength; y += tileLength)
    for (x = 0; x < imageWidth; x += tileWidth)
    TIFFReadTile(tif, buf, x, y, 0);
_TIFFfree(buf);
TIFFClose(tif);

на python.

Пока я получил:

tif = TIFF.open(tif_path, 'r')

image_width     = tif.GetField("ImageWidth")
image_length    = tif.GetField("ImageLength")
tile_width      = tif.GetField("TileWidth")
tile_length     = tif.GetField("TileLength")

y = 0
while y < image_length:

    x = 0
    while x < image_width:

        print tif.read_tile(x, y, 0)

        x += tile_width

    y += tile_length

tif.close()

Мне просто нужно проверить, поврежден ли tiff или нет.tif.info () не помогает, потому что он просто читает заголовок файла, который не поврежден даже в поврежденных файлах.

Любая помощь, мысли или идеи будут с благодарностью!Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 мая 2013

Может быть, я запутался с номенклатурой tiff, так как я привык называть фильм tiff * tiff stack , а не tiled tiff image.Я могу перебрать свой стек tiff с помощью iter_images:

tif = TIFF.open('tiffimage.tif')

for image in tif.iter_images():
    *do stuff with image*

или выбрать одно изображение из фильма, используя:

l = list(tif.iter_images())
plt.matshow(l[100))
plt.show()

Возможно, tiffile.py Модуль Кристофа Гольке также интересен для вас, как указано на сайте pylibtiff.Но вы, возможно, уже используете это, поскольку страница, на которую вы ссылаетесь, также поддерживается Gohlke?

0 голосов
/ 02 апреля 2012

Из документации на страница проекта libtiff :

"" "Предупреждение: pylibtiff в настоящее время поддерживает чтение и запись изображений, которые хранятся с использованием полос TIFF . Патчи могут поддерживать мозаичные изображения TIFF." ""

Однако, поскольку это чистый пакет Python, использующий ctypes, и вы определили один пропущенный вызов, вполне возможно, что вы можете скопировать и вставить туда другие оболочки функций, чтобы записать свой вызов в TIFFReadTile

...