我的任务是获取一个GeoTIFF,对其中的图像进行分割,然后将其保存到新的GeoTIFF(具有现有坐标)中。如果我理解正确,坐标将保存在GeoTIFF元数据中。
因此,我从原始文件中获取元数据:

File file = new File(inputFilePath);
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
IIOMetadata metadata=null;
ImageReader reader=null;
if (readers.hasNext()) {
    // pick the first available ImageReader
    reader = readers.next();
    // attach source to the reader
    reader.setInput(iis, true);
    // read metadata of first image
    metadata = reader.getImageMetadata(0);
 }

当我这样做System.out.println("Metadata: "+metadata);,我看到了正确的元标记XML树。
所以我对图像做了一些魔术
System.out.println("Starting segmentation");
BufferedImage image = UtilImageIO.loadImage(inputImage);
// Select input image type.  Some algorithms behave different depending on image type
ImageType<MultiSpectral<ImageFloat32>> imageType = ImageType.ms(3, ImageFloat32.class);
ImageSuperpixels alg = FactoryImageSegmentation.fh04(new ConfigFh04(500, 30), imageType);
// Convert image into BoofCV format
ImageBase color = imageType.createImage(image.getWidth(), image.getHeight());
ConvertBufferedImage.convertFrom(image, color, true);
// Segment and display results
performSegmentation(alg, color);
System.out.println("Segmentation finished");

结果,我获得了具有成功图像分割的BufferedImage(resultBufferedImage)。
这开始了我的问题,我试图用旧的元数据保存这个BufferedImage:
  BufferedOutputStream out;
    ImageWriter writer = ImageIO.getImageWriter(reader);
    ImageOutputStream imgout = null;
    FileOutputStream fos =null;
    fos = new FileOutputStream(outputImage);
    out = new BufferedOutputStream(fos);
    imgout = ImageIO.createImageOutputStream(out);
    writer.setOutput(imgout);
    ImageWriteParam param = writer.getDefaultWriteParam();
    IIOImage destIIOImage = new IIOImage(resultBufferedImage, null, metadata);
    System.out.println("Before write");
    writer.write(null, destIIOImage, null);
    System.out.println("After write");

我得到“写后”的打印。但是程序仍在运行,我试图等待,但没有结果。因此,当我终止进程时,即使使用地理数据也成功创建了文件。如何确定编写和停止程序的完成时间?
ps。默认的Ubuntu查看器中的图像看起来不错,但是当我在QGIS中打开图像时,它具有透明字段,如何使灰色背景透明?

最佳答案

这不是一个真正的答案,但是这里有两个关于如何使TIFF透明的答案:

  • QGis problem with raster transparent
  • How to make transparent the background of a topographic map in QGis 1.8.0?
  • 10-06 13:24
    查看更多