1

我最近从这里下载并安装了 PyLibTIFF,并一直在尝试读取平铺的 tiff 图像。

我可以完美地阅读扫描线图像,但似乎甚至找不到正确的功能来阅读瓷砖。我在我的 python 站点包文件夹中搜索了整个 libtif 目录,但没有找到任何类型的“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);

到蟒蛇。

到目前为止,我已经得到:

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() 无济于事,因为它只是读取即使在损坏的 tif 中也完好无损的文件头。

任何帮助、想法或想法将不胜感激!谢谢!

4

2 回答 2

0

也许我对 tiff 命名法感到困惑,因为我习惯将 tiff 电影称为 tiff堆栈,而不是平铺的tiff 图像。我可以使用以下命令迭代我的 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()

也许 Christoph Gohlke 的tiffile.py模块对您来说也很有趣,正如 pylibtiff 网站上所引用的那样。但是您可能已经在使用它,因为您链接的页面也由 Gohlke 维护?

于 2013-05-13T16:55:19.840 回答
0

libtiff 项目页面的文档中:

"""警告:pylibtiff 目前支持读取和写入使用TIFF 条存储的图像。欢迎补丁支持平铺的 TIFF 图像。"""

但是,由于它是一个使用 ctypes 的纯 python 包,并且您已经确定了一个缺少的调用,因此您很可能可以从那里的其他函数包装器复制和粘贴来编写您对 TIFFReadTile 的调用

于 2012-04-02T11:55:24.020 回答