gdal python 背景不是很透明

gdal python background not really transparent

当我使用 buildVRT 合并我的 geotiffs 并从 gdal 翻译时,透明度显示为透明块而不是它后面的层的内容。

见图:

用于合并 geotiff 的代码:

demList = glob.glob(os.path.dirname(os.path.abspath(__file__)) + "//..//icons//*.tif")
print(demList)

VRToptions = gdal.BuildVRTOptions(srcNodata="255 255 255")
vrt = gdal.BuildVRT(os.path.dirname(os.path.abspath(__file__)) + "//merged.vrt", demList, options=VRToptions)
translateOptions = gdal.TranslateOptions(creationOptions=["TILED=YES"])
gdal.Translate(os.path.dirname(os.path.abspath(__file__)) + "//mergedDEM.tif", vrt, options=translateOptions)
vrt = None

我的问题是如何使用前一层作为背景而不是透明块。

有问题的完整代码: https://github.com/NickSmeding/MergeGeotiff

这个怎么样(使用 rasterio 及其扩展 rioxarray)并同时使用你的 tifs :

import rioxarray
import rioxarray.merge

icon = "./tiffs/horse2.tif"
background = "./tiffs/4c5ae720f274505972ecedf4066bb32dfb28b63e5785030a7eb55b4e9978602c.tif"

# open the rasters
with rioxarray.open_rasterio('./tiffs/horse2.tif') as rds1:
    with rioxarray.open_rasterio(background) as rds2:

        # ensure the rasters have the same projection/transform/shape
        rds3 = rds1.rio.reproject_match(rds2)
        ar = rds3.values
        
        #look for pixels in icon having alpha = 255
        ix = (ar[3] == 255)
        
        #update background pixels with icon
        for k in range(4):
            rds2.values[k][ix]=ar[k][ix]
        
        #save updated raster
        rds2.rio.to_raster("test.tif")

图标有点像素化,但这只是因为你的背景分辨率低于你icon/tif中的分辨率。也许您可以将两个阵列重新投影到两个层的最大分辨率,但恕我直言,那将是另一个主题。

(注意你的TIF图标没问题;我试着在QGIS中打开它,你可以叠加图层。我也试着编辑它重新声明一个无数据值,但我仍然得到相同的结果和你一样。也许如果你的背景和图标 tif 共享相同的 nodata 值,可能有一种方法可以计算它而无需像我那样访问像素,...)