我想从Sentinel-2图像计算ndvi。
import os
import numpy as np
import rasterio as rio
# suppress true divide warning numpy for 0 divide
np.seterr(divide='ignore', invalid='ignore')
red_f = absolute/path/to/band/4
nir_f = absolute/path/to/band/8
def calc_ndvi():
with rio.open(red_f) as src:
red = src.read()
red = red.astype(np.float64)
with rio.open(nir_f) as src:
nir = src.read()
nir = red.astype(np.float64)
ndvi = np.divide((nir - red),(nir + red))
return ndvi
ndvi = calc_ndvi()
"red"和"nir"最初被加载为"uint16数组",形状为(1,10980,10980)。在使用astype计算之前,我将其转换为浮点数。据我所知,没有必要将数组扁平化为2d形状。我尝试过这种方法,但没有成功。
不幸的是,结果是一个完全填充0的数组。
我哪里做错了?
1条答案
按热度按时间rt4zxlrg1#
您有一个打字错误:
应为:
在:
你真的在做:
得到0的数组