Python 循环读取影像 计算NDVI

from osgeo import gdal
import numpy as np
from osgeo import gdal
import os
#循环读取
FilePath='D:\\影像练习'
tif_name=os.listdir(FilePath) #读取FilePath下的目录名,包含扩展名
SavePath='D:\\影像练习\\NDVI输出'
print(tif_name)

for i in range(len(tif_name)):  #i从0开始到len(tif_name)-1
    qianzui=os.path.splitext(tif_name[i])[0]  #将文件名和扩展名分隔开
    houzui=os.path.splitext(tif_name[i])[1]
    if houzui=='.tif':
        ReadName=FilePath+'\\'+qianzui+houzui
        SaveName=SavePath+'\\'+qianzui+'_NDVI.tif'
        dataset = gdal.Open(ReadName)
        cols = dataset.RasterXSize  # 列数
        rows = dataset.RasterYSize  # 行数  空间坐标 可以理解为行列号
        # 计算 NDVI=(NIR-RED)/(NIR+RED)
        # 提取红波段
        band_red = dataset.GetRasterBand(3)
        data_red = band_red.ReadAsArray(0, 0, cols, rows)  # 根据位置获取像素值
        # 提取近红外波段
        band_nir = dataset.GetRasterBand(4)
        data_nir = band_nir.ReadAsArray(0, 0, cols, rows)
        ndvi = (data_nir - data_red) / (data_nir + data_red)

        #创建栅格数据集
        driver = gdal.GetDriverByName('GTiff')  # 将GTiff图纸实体化为driver,括号内为文件类型
        dataset_out = driver.Create(SaveName, cols, rows, 1, gdal.GDT_Float32)  # 这里的1指的是创建的栅格数据文件只能容纳一个波段
        # 定义仿射矩阵和投影信息
        dataset_out.SetGeoTransform(dataset.GetGeoTransform())
        dataset_out.SetProjection(dataset.GetProjection())
        # 写入像素值
        band_out = dataset_out.GetRasterBand(1)
        band_out.WriteArray(ndvi)  # 把数组写入到栅格数据相应的波段中
        # 清空缓存,关闭数据集
        dataset.FlushCache()
        dataset_out.FlushCache()  # 把内存中的数据写入到文件中
        del dataset
        del dataset_out

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫杨傲天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值