import geopandas as gpd
import rasterio
from rasterio.mask import mask
import matplotlib.pyplot as plt
import numpy as np# 载入shp文件 - 它只包含几何对象
shapefile_path = r'D:\Desktop\新建文件夹 (3)\01.shp'
shapes = gpd.read_file(shapefile_path)# 打开图像
image_path = r'D:\Desktop\新建文件夹 (3)\nir.tif'
with rasterio.open(image_path) as src:# 对于shp文件中的每个几何对象for geometry in shapes.geometry:# 利用geometry来裁剪图像out_image, out_transform = mask(src, [geometry], crop=True) # out_image的维度(c,w,h)# plt.imshow(out_image[0])# plt.show()# 计算裁剪区域的光谱特征(这里是计算平均值)# 注意检查和处理无数据值或其他特殊值out_image = out_image.astype('float64')no_data_value = src.nodatavals[0] # 提取原始图像数据源(src)中定义的第一个无数据值out_image[out_image == no_data_value] = np.nan # 像素赋值为NaNmean_values = np.nanmean(out_image, axis=(1, 2)) # 沿着给定轴(在这里是轴1和轴2,分别代表图像的高和宽)上的均值# 记下或分析这些特征print(mean_values)