我试图通过对像素数组进行像素数学运算来使用NumPy和CV2,然后使用查找表并用查找表的值替换该像素。
这有效,但速度太慢,
image = cv2.imread('C:\\Users\\Event38\\Desktop\\IMG_2231.JPG')
height, width, depth = image.shape
image = image.astype('float')
B = image[:, :, 0]
G = image[:, :, 1]
R = image[:, :, 2]
num = ((R+G)-(2*B))
den = ((R+G)+(2*B))
NDVI = ((num/den)*127.5) + 127.5
print NDVI[0,0] # print array NDVI spot 0,0 value
print r[NDVI[0,0]][0] # looks up NDVI's spot 0,0 in LUT
for i in range(0, height):
for j in range (0, width):
image.itemset((i,j,0),r[NDVI[i,j]][3])
image.itemset((i,j,1),r[NDVI[i,j]][2])
image.itemset((i,j,2),r[NDVI[i,j]][1])
#image = np.where(den == 0,1, NDVI).clip(0.0, 255.0)
关于如何使代码的for循环部分更快地工作的任何建议都会很棒,我知道有一些方法可以消除它。谢谢!
答案 0 :(得分:1)
您可以尝试使用OpenCV的查找表来一次应用LUT。这是documentation
C ++
void LUT(InputArray src, InputArray lut, OutputArray dst, int interpolation=0 )
Python
cv2.LUT(src, lut[, dst[, interpolation]]) → dst