OpenIMAJ 라이브러리를 사용하고 있습니다. "JPEG"및 "PNG"파일에서는 잘 작동하지만 tiff 파일에서는 오류가 발생합니다. 여기OpenIMAJ 라이브러리에서 tiff 파일을 읽을 수 없습니까?
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);
그리고 오류입니다 :
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"라이브러리는 별도로/단독으로 파일을 읽을 수 있습니다. 따라서 OpenIMAJ와 함께 작동하는 TwelveMonkeys 라이브러리를 가져 와서 TIFF 파일을 지원하고 TIFF 파일을 처리했지만 그 파일은 작동하지 않았습니다 ("TwelveMonkeys"는 별도의 프로젝트에서이 파일을 읽을 수 있었지만). 내가 그 주위에 26메가바이트 때문에 무언가가 파일의 크기에 관련이있을 수있는 오류 메시지를 추적하고 내가 오류가 방법에서 유래 것으로 나타났습니다 때
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)
나중에 "읽기":이 예외를 가지고 최대 크기를 사용한다고 생각되는 "org.openimaj.image.ExtendedImageIO"클래스의 클래스 10mb :
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에서 클러스터링/분할과 같은 기능을 제공합니다)?
TIFF 파일의 이미지 데이터를 압축 할 수 있습니다. TIFF 형식은 다른 압축 방법을 지원합니다. 분명히 (오류 메시지에 따라) 사용하려는 라이브러리는 읽고 자하는 TIFF 파일에 사용 된 특정 압축 방법을 지원하지 않습니다. – Jesper
@Jesper 답장을 보내 주셔서 감사합니다.하지만 "TwelveMonkeys"라이브러리는 모든 TIFF 파일을 읽을 수 있으며 OpenIMAJ을 기반으로하는 "TwelveMonkeys"라이브러리를 내 프로젝트에 가져 왔을 때 (이제는 추가 코딩을 가져 오지 않음), 이제 Tiff 파일을 읽을 수 있습니다. 그것들에 OpenIMAJ 기능을 적용하십시오; 하지만 그 파일 때문에 OpenIMAJ이 허용하는 것보다 더 큰 이유는 그것을 처리 할 수없는 이유이기 때문입니다. OpenIMAJ 팀은 제한 즉, 10MB의 버퍼 크기를 제거해야한다고 생각합니다. –
TIFF 압축 7은 [("새 스타일") JPEG] (http://www.awaresystems.be/imaging/tiff/tifftags/compression.html)입니다. TwelveMonkeys ImageIO가이를 읽을 수 있으며 JAI ImageIO도 생각합니다. – haraldK