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
我的问题是如何使用前一层作为背景而不是透明块。
这个怎么样(使用 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 值,可能有一种方法可以计算它而无需像我那样访问像素,...)
当我使用 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
我的问题是如何使用前一层作为背景而不是透明块。
这个怎么样(使用 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 值,可能有一种方法可以计算它而无需像我那样访问像素,...)