用gdal读取和保存tif格式的影像的python代码
时间: 2024-05-08 17:19:17 浏览: 221
以下是使用 GDAL 库读取和保存 tif 格式影像的 Python 代码:
```python
from osgeo import gdal
# 读取 tif 格式影像
ds = gdal.Open('input.tif')
# 获取影像的基本信息
cols = ds.RasterXSize
rows = ds.RasterYSize
bands = ds.RasterCount
# 获取影像地理参考信息
transform = ds.GetGeoTransform()
projection = ds.GetProjection()
# 获取影像数据
band = ds.GetRasterBand(1)
data = band.ReadAsArray(0, 0, cols, rows)
# 关闭数据集
ds = None
# 保存 tif 格式影像
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create('output.tif', cols, rows, bands, gdal.GDT_Float32)
out_ds.SetGeoTransform(transform)
out_ds.SetProjection(projection)
out_ds.GetRasterBand(1).WriteArray(data)
out_ds = None
```
希望以上代码能对您有所帮助。
相关问题
使用python和GDAL库对tif格式影像进行滤波处理
可以使用Python的GDAL库对tif格式影像进行滤波处理,以下是一个简单的示例代码:
```python
from osgeo import gdal
import numpy as np
from scipy import ndimage
# 打开tif格式影像
ds = gdal.Open('input.tif')
# 读取影像数据和元数据
band = ds.GetRasterBand(1)
data = band.ReadAsArray().astype(np.float32)
metadata = ds.GetMetadata()
# 对影像进行高斯滤波
data_filtered = ndimage.gaussian_filter(data, sigma=3)
# 创建输出文件
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create('output.tif', band.XSize, band.YSize, 1, gdal.GDT_Float32)
# 写入滤波后的数据和元数据
out_ds.SetGeoTransform(ds.GetGeoTransform())
out_ds.SetProjection(ds.GetProjection())
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(data_filtered)
# 关闭文件
del out_ds
```
在上述代码中,首先使用GDAL库打开输入的tif格式影像文件,然后读取影像数据和元数据。接着使用Scipy库中的`ndimage.gaussian_filter`函数对影像进行高斯滤波处理,处理后的结果保存在`data_filtered`变量中。接着使用GDAL库创建输出文件,并将滤波后的数据写入输出文件中。最后关闭文件。
需要注意的是,在使用GDAL库时,需要先安装相应的GDAL库,并设置好环境变量。此外,上述代码仅对单波段影像进行滤波处理,如果需要对多波段影像进行处理,可以使用循环对每个波段进行处理并分别写入输出文件中。
写出使用python和GDAL库对tif格式影像进行中值滤波处理的详细代码
以下是使用 Python 和 GDAL 库对 tif 格式影像进行中值滤波处理的示例代码:
```python
from osgeo import gdal
import numpy as np
# 读取tif影像
img_path = '/path/to/your/tif/image.tif'
ds = gdal.Open(img_path)
band = ds.GetRasterBand(1) # 读取第一个波段
# 读取波段数据,转换为numpy数组
data = band.ReadAsArray().astype(np.float)
# 中值滤波处理
from scipy.signal import medfilt
data_median = medfilt(data, kernel_size=3) # kernel_size为滤波窗口大小
# 将处理后的数据写回tif影像
driver = ds.GetDriver()
out_path = '/path/to/your/output/tif/image_median.tif'
out_ds = driver.Create(out_path, ds.RasterXSize, ds.RasterYSize, 1, band.DataType)
out_ds.SetProjection(ds.GetProjection())
out_ds.SetGeoTransform(ds.GetGeoTransform())
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(data_median)
out_band.FlushCache()
```
以上代码中,使用了 `gdal.Open()` 函数读取 tif 影像,并使用 `ReadAsArray()` 函数将影像数据读取为 numpy 数组。然后使用 `scipy.signal` 库中的 `medfilt()` 函数进行中值滤波处理,最后使用 `Create()` 函数创建输出影像并将处理后的数据写入其中。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)