Несколько вещей ... во-первых, имейте в виду, что OpenCV использует BGR-порядок, а не RGB, как, кажется, предполагает ваш код. Это, вероятно, означает, что вы выбрали неправильные каналы как Red и NearIR - в этом случае мой код будет иметь ту же ошибку.
Во-вторых, вы действительно, действительно хотите попробовать и избежать обработки изображений в Python с Циклы for
- они очень медленные, трудно читаемые и подвержены ошибкам в пределах l oop. Ниже приведен непроверенный код, поскольку вы не предоставили изображение, но оно должно дать вам представление:
import numpy as np
import cv2
# Load image and convert to float - for later division
im = cv2.imread('inputimg.jpg').astype(np.float)
# Split into 3 channels, discarding the first and saving the second as R, third as NearIR
_, R, NearIR = cv2.split(im)
# Compute NDVI values for each pixel
NDVI = (NearIR - R) / (NearIR + R + 0.001)
Это приведет нас к тому, что вы напечатаете Done
в своем коде. Обратите внимание, что, если вы не знали, что OpenCV использует упорядочение BGR, для 1-го и 3-го каналов потребуется замена, т. Е. имейте в виду, что ваш NDVI будет с плавающей точкой в диапазоне [-1,1], поэтому вы можете умножить его на 10 и преобразовать в целое число, чтобы назначить один из ваших 9 цветов ...
Пожалуйста загрузите изображение, чтобы люди могли ответить вам лучше.