首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenIMAJ库不能读取tiff文件?

OpenIMAJ库不能读取tiff文件?
EN

Stack Overflow用户
提问于 2017-03-06 10:55:48
回答 1查看 435关注 0票数 0

我正在使用OpenIMAJ库,它很好地工作在"JPEG“和"PNG”文件上,但是对于tiff文件,它给了我一个错误。以下是代码:

代码语言:javascript
复制
import org.openimaj.image.ImageUtilities;
import org.openimaj.image.MBFImage;

....

File file = new File("/home/mosab/Desktop/input/tif.tif");
MBFImage input = ImageUtilities.readMBF(file);

这是一个错误:

代码语言:javascript
复制
Exception in thread "main" java.io.IOException: org.apache.sanselan.ImageReadException: Tiff: unknown compression: 7
    at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:189)
    at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:126)
    at org.openimaj.image.ImageUtilities.readMBF(ImageUtilities.java:355)
    at org.mosab.TestOpenIMAJ.TestKmeans.main(TestKmeans.java:49)
Caused by: org.apache.sanselan.ImageReadException: Tiff: unknown compression: 7
    at org.apache.sanselan.formats.tiff.datareaders.DataReader.decompress(DataReader.java:135)
    at org.apache.sanselan.formats.tiff.datareaders.DataReaderStrips.readImageData(DataReaderStrips.java:96)
    at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:505)
    at org.apache.sanselan.formats.tiff.TiffDirectory.getTiffImage(TiffDirectory.java:163)
    at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:441)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1163)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1136)
    at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:187)
    ... 3 more

这是我正在使用的tiff文件(特别是GeoTiff):

"https://drive.google.com/file/d/0ByKaCojxzNa9MWxPTUJjZURHR1E/view?usp=sharing

这是否意味着OpenIMAJ库不支持tiff格式/GeoTiff?

我假设OpenIMAJ不支持tiff,所以我尝试使用"TwelveMonkeys“库来读取该文件。"TwelveMonkeys“库单独/单独能够读取文件。因此,我导入了TwelveMonkeys库,以便与OpenIMAJ一起工作,从而支持tiff文件,这对一些tiff文件有效,但对于该文件却不起作用(尽管"TwelveMonkeys“能够在单独的项目中单独读取它),我得到了这个例外:

代码语言:javascript
复制
Exception in thread "main" java.io.IOException: Resetting to invalid mark
at java.io.BufferedInputStream.reset(BufferedInputStream.java:448)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:185)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:126)
at org.openimaj.image.ImageUtilities.readMBF(ImageUtilities.java:355)
at org.mosab.TestOpenIMAJ.TestKmeans.main(TestKmeans.java:49)

稍后,当我跟踪错误消息时,我发现可能与文件的大小有关,因为它大约是26 may ,并且我注意到错误来自类"org.openimaj.image.ExtendedImageIO“的”读取“方法,我认为它使用的是最大10 may的大小。

代码语言:javascript
复制
public static BufferedImage read(InputStream input) throws IOException {
    if (input == null) {
        throw new IllegalArgumentException("input == null!");
    }

    final NonClosableInputStream buffer = new NonClosableInputStream(input);
    buffer.mark(10 * 1024 * 1024); // 10mb I think here is the problem

    BufferedImage bi;
    try {
        bi = readInternal(buffer);
    } catch (final Exception ex) {
        bi = null;
    }

    if (bi == null) {
        buffer.reset();
        try {
            bi = Sanselan.getBufferedImage(buffer);
        } catch (final Throwable e) {
            throw new IOException(e);
        }
    }

    return bi;
}

那么,我如何解决这个问题并在OpenIMAJ中读取这个tiff文件(为了进一步应用OpenIMAJ提供的工具,就像集群/分段一样)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 11:55:15

TIFF是一种可怕的格式,因为它有许多自定义扩展,而库并不总是支持这些扩展。OpenIMAJ试图通过使用一批不同的库来解决其中的一些问题,以便读取各种不同的图像,但是在这种情况下,它失败了。正如您已经注意到的,存在一个10 be缓冲区限制,这会导致问题--将其增加到100 be允许加载您链接的映像。我将更新代码以解决这个问题(因为它只是一个限制,因此底层缓冲区似乎要小得多,因此不会造成任何问题)。

在部署新快照之前,您可以加载链接到以下内容的映像:

代码语言:javascript
复制
MBFImage img = ImageUtilities.
    createMBFImage(Sanselan.getBufferedImage(new File("tif.tif")), false);

似乎有一个单独的问题,Sanselan似乎无法加载您的所有图像(基于堆栈跟踪引用未知图像压缩)。如果您可以在GitHub bug报告(https://github.com/openimaj/openimaj/issues/119)上提供到这样一个映像的链接,那么可能会在使用TwelveMonkeys对此类图像使用TwelveMonkeys的回退中编写代码,或者我们可以看到更新版本的Sanselan是否修复了这个问题。同时,您可以对代码中的这些图像直接使用TwelveMonkeys,并使用上面的ImageUtilities将其转换为MBFImage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42623770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档