【问题标题】:Reading Tiled Images with PyLibtiff使用 PyLibtiff 读取平铺图像
【发布时间】:2012-04-02 08:08:56
【问题描述】:

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

我可以完美地阅读扫描线图像,但似乎甚至找不到正确的功能来阅读瓷砖。我在我的 python 站点包文件夹中搜索了整个 libtif 目录,但没有找到任何类型的“read_tile”命令。

我基本上是在尝试从this example转码:

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() 并没有帮助,因为它只是读取即使在损坏的 tif 中也是完整的文件头。

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

【问题讨论】:

    标签: python tiff tile corrupt libtiff


    【解决方案1】:

    来自libtiff's project page上的文档:

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

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

    【讨论】:

    • 感谢您的回复,但是是的,我确实在最初的搜索中看到了第一行引用的行。你能举个例子来说明你的建议吗?
    【解决方案2】:

    也许我对 tiff 命名法感到困惑,因为我习惯将 tiff 电影称为 tiff stack,而不是 tiled tiff 图像。我可以使用iter_images 遍历我的 tiff 堆栈:

    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 维护?

    【讨论】:

    • 问题是“iter_images”通过了 tiff 的层。平铺的 tiff 的构成完全不同,因此功能不起作用。 “平铺” tiff 是“mipmapping”的结果 - en.wikipedia.org/wiki/Mipmap 我猜它不像标准分层 tiff 那样常见。不过感谢您的回复。
    猜你喜欢
    • 2014-02-25
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2011-02-16
    • 2012-01-01
    • 2023-02-01
    相关资源
    最近更新 更多