【Python】基于Python统计文件目录内每景栅格图像均值并输出成表

10 篇文章 21 订阅

1 简介

乔博士最近在做一个研究,涉及到过去十几年某些地区某些指标逐日的提取。一共五个地区,各地区下五个指标,各指标5000+副影像需要获取均值。。。。。所以一共大概好几万副影像需要统计。。。然而在ArcGIS上手动做还是通过ArcPy做都不太现实,所以就问问我有没有相关的代码程序:
在这里插入图片描述
我是有的,然而因为我之前涉及的没有那么多影像,最多也就几十景求均值,所以现成的代码是输入在终端里的。所以乔博士又提出了这么个要求:
在这里插入图片描述
所以,这次的代码目标是提取某个文件夹里所有影像的均值,并且输出成excel可以读的表,方便后续的研究。

2 效果展示

首先,得把tif扔进一个文件夹里:
在这里插入图片描述
然后使用后面要贴出来的代码,就可以得到一个csv文件,csv文件里是这样的:
在这里插入图片描述
同时终端里是这样的:
在这里插入图片描述
可以说是一模一样!
我们就可以通过这个csv进一步方便的进行排序、制图什么的了。

3 代码

from osgeo import gdal
import glob
import numpy as np
import csv

# 计算栅格图像均值
def calc_grid_mean(tiffile, csvpath):
    open_tif = gdal.Open(tiffile) # 打开tif文件
    # 打开栅格图像的波段
    band = open_tif.GetRasterBand(1).ReadAsArray()
    count_value = [] # 存放像元值的数组
    # 遍历图像矩阵,剔除异常值,读取有效值
    for i in range(len(band)):
        for j in range(len(band[i])):
            if band[i][j] >= -1000:
                count_value.append(band[i][j]) # 将有效值放入新数组
    # 把文件名和参数写入csv
    mycsv = open(str(csvpath), 'a', newline='') # 新建并打开csv
    csv_write = csv.writer(mycsv, dialect='excel')
    tif_info = (str(tif[-18:]), float(np.mean(count_value))) # 把文件名称+均值整合为一行
    csv_write.writerow(tif_info) # 把文件名称+均值写入csv
    print(f'{str(tif[-18:])}, {np.mean(count_value)}') # 在终端中打印出文件名称+均值


csv_path = r'csv.csv' # csv输出路径
tif_dir = glob.glob(r'文件夹\*.tif') # tif目录

for tif in tif_dir: # 遍历文件夹
    calc_grid_mean(tif, csv_path) # 计算均值

这个代码涉及到一个函数+一个遍历。
函数是读取一张tif并且计算均值,因为有些在ArcGIS裁剪后的图像空值其实是负好几,所以我设置了一个条件,选取大于-1000的。
遍历就是遍历选取的文件夹里的所有tif,通过上面的函数计算均值写入同一个csv里。
-----------------------分割线(以下是乞讨内容)-----------------------
在这里插入图片描述

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值