Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何读取PNG,将tiff文件中的数据添加到PNG中,并将其另存为另一个tiff?_Python_Tiff_Gdal_Rasterio_Satellite Image - Fatal编程技术网

Python 如何读取PNG,将tiff文件中的数据添加到PNG中,并将其另存为另一个tiff?

Python 如何读取PNG,将tiff文件中的数据添加到PNG中,并将其另存为另一个tiff?,python,tiff,gdal,rasterio,satellite-image,Python,Tiff,Gdal,Rasterio,Satellite Image,我有两个文件。一个是PNG,另一个是TIFF(或.jp2)。我想从卫星图像(.jp2或.tif)中读取地理空间数据并将其“放入”png文件,然后将其另存为新的tif 我对使用光栅数据非常陌生。我正在使用rasterio,到目前为止,我已成功获取tif文件的元数据: import rasterio as rio tif = rio.open("TIFFile.tif") png = rio.open("PNGFile.png") tif_read = ti

我有两个文件。一个是PNG,另一个是TIFF(或.jp2)。我想从卫星图像(.jp2或.tif)中读取地理空间数据并将其“放入”png文件,然后将其另存为新的tif

我对使用光栅数据非常陌生。我正在使用rasterio,到目前为止,我已成功获取tif文件的元数据:

import rasterio as rio
tif = rio.open("TIFFile.tif")
png = rio.open("PNGFile.png")

tif_read = tif.read()
png_read = png.read()

tif_width = tif.width
tif_height = tif.height
tif_dim = (tif_width, tif_height)

png_width = png.width
png_height = png.height
png_dim = (png_width, png_height)

tif_meta = tif.meta
png_meta = png.meta

print("TIF META: ", tif_meta)
print("PNG META: ", png_meta)
输出:

TIF META:  {'driver': 'GTiff', 'dtype': 'float32', 'nodata': None, 'width': 10980, 'height': 10980, 'count': 4, 'crs': CRS.from_epsg(32635), 'transform': Affine(10.0, 0.0, 699965.0,
   0.0, -10.0, 4100035.0)}
PNG META:  {'driver': 'GTiff', 'dtype': 'float32', 'nodata': None, 'width': 5490, 'height': 5490, 'count': 1, 'crs': None, 'transform': Affine(1.0, 0.0, 0.0,
   0.0, 1.0, 0.0)}
我知道我可以使用原始tif的元创建一个新的tif文件,如下所示:

with rio.open('NEWTIF.tif', 'w', **tif_meta) as dst:
    dst.write(tif_read.astype(rio.float32))
鉴于此,基本上,我想知道如何创建一个新的tif文件,将另一个tif的元添加到png文件中—将png的光栅数据与tif的地理空间数据合并

我一直在寻找这个,但无法理解我在中发现了什么,所以:


如何实现这一点?

首先,重要的是,从你的帖子中可以看出,图像似乎没有相同的形状,因此可能更具挑战性,需要更多的处理

不过,我将回答您在文章标题中定义的问题-如何读取这两个文件并将其保存为tiff。为了做到这一点,我将读取两个图像作为numpy数组,将它们堆叠在一起,然后使用光栅对它们进行地理参考

因此,您可以尝试类似以下内容的seomthin:

import rasterio 
import numpy as np

tif = rio.open("TIFFile.tif")
png = rio.open("PNGFile.png")

tif_read = tif.read()
png_read = png.read()

#stack the arrays to have two bands

img=np.stack([tif_read,png_read])

#write teh results
       with rasterio.open('img.tiff', 
                           'w',
                           driver='GTiff',
                           height=img.shape[1],
                           width=img.shape[2],
                           count=2,#numebr of bands
                           dtype=img.dtype,
                           crs=tif.crs,
                           nodata=None, # change if data has nodata value
                           transform=tif.transform) as dst:
            dst.write(img[0], 1)
            dst.write(img[1], 2)
这应该会将两个图像保存为具有两个条带的新tiff。 然而,为了使这项工作,你将需要有两个图像相同的大小,这似乎利克你现在没有。
如果您提供更多关于您拥有的文件的数据-它们是否重叠?它们有不同的空间分辨率吗?为什么它们的尺寸不同?你的目标是什么?也许我能帮上更多的忙。

非常感谢您的帮助。我想我被它启发了。我可以使用相同大小的图像。让我多读一读,然后试一下,很快就会回复你。@ 0xMTH,如果你觉得答案有用,请考虑接受,谢谢!哦,这是个打字错误,我的意思是“谢谢妈妈!”,我的错:好吧,你不知道