Разница между pyplot и функцией imshow в opencv - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу рассчитать нормализованный разностный индекс растительности (или 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)

Можете ли вы помочь мне, как сделать это деление? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...