首页 > 解决方案 > 在 python 中使用 RGB 栅格识别植被 - 数组问题

问题描述

抱歉,如果我的问题措辞不佳,但基本上我使用带有 GDAL 的 Python 来识别 TIF 文件中的植被(仅使用 RGB 波段)。我查看了图像中的波段值,并查看了一些随机样本点,发现植被往往落在每个波段的特定范围内(例如:30-71 蓝色、125-175 绿色等)。所以这就是我写出来的方式,“数组”是一个包含三个波段的数组:

vegetation = (arrays[0] > 67 & arrays[0] < 133) & (arrays[1] > 125 & arrays[1] < 175) & (arrays[2] > 30 & arrays[2] < 71)

然后我创建一个新文件并使用 band.WriteArray(vegetation)。但是,对于植被线,我收到以下错误:

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这到底是什么意思?我应该以不同的方式格式化它吗?Python 不完全是我的强项,所以越简单越好。

标签: python

解决方案


&优先级高于>。所以

arrays[0] > 67 & arrays[0] < 133

读作

arrays[0] > (67 & arrays[0]) < 133

和链接布尔运算符 ( x > y > z) 强制将所有操作数转换为布尔值。例如

(arrays[0] > 67 & arrays[0]) < 133

是合法的。正如您的错误所说,将数组转换为布尔值是不明确的。你可能想要的是

(arrays[0] > 67) & (arrays[0] < 133)

你也可以去掉所有其他的括号,除非你更喜欢这种风格,因为(x & y) & z == x & (y & z)


推荐阅读