Я хочу рассчитать нормализованный разностный индекс растительности (или NDVI) любого изображения, и я наткнулся на 2 вопроса. 1. я делю каналы на b, g, r, и когда я показываю их с помощью функции pyplot и opencv .imshow, это показывает различные изображения, и я не знаю почему:
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("Cafemplato_SAT.jpeg", 1)
alto, ancho, canales = img.shape
print("El alto de la imagen es {}, el ancho es {} y tiene {} canal(es)".format(alto, ancho, canales))
cv2.imshow("orginal", img)
b = img[:,:,0]
b2 = cv2.cvtColor(img[:,:,0], cv2.COLOR_GRAY2BGR)
b3 = np.zeros(img.shape, dtype="uint8")
b3[:,:,0] = b
g = img[:,:,1]
r = img[:,:,2]
num = g-r
den = g+r-b
VARI = np.divide(num, den)
print(b.shape)
print(b2.shape)
print(num.shape)
plt.figure(1)
plt.subplot(311)
plt.imshow(b)
plt.subplot(312)
plt.imshow(g)
plt.subplot(313)
plt.imshow(r)
plt.figure(2)
plt.subplot(211)
plt.imshow(num)
plt.subplot(212)
plt.imshow(den)
a,v,ro = cv2.split(img)
cv2.imshow("a",b)
cv2.imshow("v",g)
cv2.imshow("rojo", r)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
Из plt.imshow (): вывод из pyplot imshow
Из cv2.imshow () вывод из opencv imshow
2. Как только у меня появятся мои каналы, вычисление NDVI (fale NDVI) будет следующим: NVDI = (Зеленый - КРАСНЫЙ) / (Зеленый + КРАСНЫЙ - СИНИЙ), поэтому я попытался создать 2 переменные (num и den), а затем вычислить матричное деление (по элементам) с использованием numpy .divide (num, den), но возникает следующая ошибка:
C:/Users/Serna/PycharmProjects/intro a opencv/cafe.py:20: RuntimeWarning: divide
by zero encountered in true_divide
VARI = np.divide(num, den)
C:/Users/Serna/PycharmProjects/intro a opencv/cafe.py:20: RuntimeWarning:
invalid value encountered in true_divide
VARI = np.divide(num, den)
Можете ли вы помочь мне, как сделать это деление? Спасибо