【发布时间】:2016-01-26 21:08:33
【问题描述】:
我正在使用 OpenCv 库在 python 中编程。
我正在尝试使用 opencv 删除阴影,因此之后我想计算 NDVI(Arcpy 库)。所以如果我从原始图像计算 NDVI,它工作正常,但是如果我想从消除阴影后的结果中计算 NDVI,我得到了这个错误:
Traceback (most recent call last):
File "C:/Python27/sombras_ndvi.py", line 36, in <module>
NIR = arcpy.sa.Raster(sumada3+ '\Band_1')
TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'str'
完整的代码是这样的:
#I create a workspace to calculate NDVI..
arcpy.CheckOutExtension("spatial")
env.workspace = r'C:\python27\archivos'
#the first step is apply some filters to finally delete shades.
img = cv2.imread('C:\python27\Archivos\image02.jpg',0)
orig = cv2.imread('C:\python27\Archivos\image02.jpg')
thresh = 45
maxValue = 255
blur = cv2.blur(img, (15,15))
medianblur = cv2.medianBlur(blur,11)
th, dst = cv2.threshold(blur, thresh, maxValue, cv2.THRESH_BINARY_INV)
dst2_3channel= cv2.cvtColor(dst,cv2.COLOR_GRAY2BGR)
sumada3 = cv2.add(dst2_3channel,orig)
#NOW I TRY TO CALCULATE NDVI
NIR = arcpy.sa.Raster(sumada3+ '\Band_1')
red = arcpy.sa.Raster(sumada3+ '\Band_2')
#NDVI = (NIR-red)/(NIR+red)
num = arcpy.sa.Float(NIR-red)
denom = arcpy.sa.Float(NIR+red)
NDVI = arcpy.sa.Divide(num, denom)
ndvi_out = ('NDVI_sombras.jpg')
NDVI.save(ndvi_out)
【问题讨论】:
-
sumada3是一个 numpy 像素值数组,而'\Band_1'是一个字符串。正如错误消息所说,+操作对于这种输入类型组合是未定义的。我不太清楚你想在这里做什么。'\Band_1'应该代表什么?sumada3 + '\Band_1'的结果应该是什么类型的对象?
标签: python opencv numpy arcgis arcpy