python - GDAL 的 GetProjection() 和 GetGeoTransform() 的 Rasterio 等价物?
问题描述
我有一个 GeoTIFF,我在 OpenCV 中做了很多处理。处理后,它丢失了它的空间信息,所以我需要将它重新插入。在 GDAL 中,我会在处理之前从原始图像中提取它,然后将其与后处理的图像一起推回,如下所示:
#open original geotiff
original_img = gdal.Open('/path-to-file/original_img.tif', 1)
crs = original_img.GetProjection()
gt = original_img.GetGeoTransform()
del original_ds
#open cv processes here....write post-processed file
# open processed raster and set the projection and geotransform
img = gdal.Open('/path-to-file/processed_img.tif', 1)
img.SetProjection(crs)
img.SetGeoTransform(gt)
有没有办法在 Rasterio 中做到这一点?
解决方案
根据RasterIO 文档,您可以简单地访问开放数据集上的属性crs
和属性,以分别获取投影和地理变换。然后,您可以在打开transform
时将它们传递回输出图像文件。
例子:
# Open original Geotiff
original_img = rasterio.open("path/to/input.tif")
# Extract spatial metadata
input_crs = original_img.crs
input_gt = original.transform
# Do your processing. For this example, just read first band of input dataset
processed_img = original_img.read(1)
# Prepare output geotiff file. We give crs and gt read from input as spatial metadata
with rasterio.open(
'path/to/output.tif',
'w',
driver = 'GTiff',
count = 1,
height = processed_img.shape[0],
width = processed_img.shape[1],
dtype = processed_img.dtype,
crs = input_crs,
transform = input_gt
) as output:
output.write(processed_img, 1)
上述示例的注释:
- 假设在处理图像时保留图像尺寸。如果没有,您将不得不相应地推导出空间变换。
- 假设单波段数据集
推荐阅读
- python - Python PIL(枕头):有效地将图像列表转换为 np.array?
- java - Swing - 更改 Windows 主题会重置自定义边框、插图和背景
- r - 如何在 R 中导入多个 xlsx 工作表
- d3.js - 从 c3 阶梯图中删除垂直线
- winforms - Windows 窗体 - 报告查看器 14:pdf 大小问题
- sql - 为 Oracle 插入循环
- bash - 如何在 .bashrc 中创建条件别名
- python - 用于谷歌操作的 Python 库
- botframework - 我在哪里可以看到由 bot 框架中的节点 js 代码生成的日志?
- ruby-on-rails - Rails 5 生产应用程序间歇性地使用 nodejs