-
Notifications
You must be signed in to change notification settings - Fork 0
/
ndvi_red_v3.py
72 lines (60 loc) · 2.39 KB
/
ndvi_red_v3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#Cambio en el ajuste de blancos, con filtro red de infragram
#se agrego el ajuste del parametro brillo
#se ajusto los parametros antes de la toma de la foto
import cv2
import numpy as np
import io
import picamera
import time
import sys
#Create a memory stream so photos doesn't need to be saved in a file
stream = io.BytesIO()
#Get the picture (low resolution, so it should be quite fast)
#Here you can also specify other parameters (e.g.:rotate the image)
with picamera.PiCamera() as camera:
camera.start_preview()
time.sleep(10)
camera.shutter_speed = 500000 #values in microseconds 0-6000000
camera.exposure_mode = 'off'
camera.iso = 100 #values between 0-800
camera.awb_mode='off' #For adjust whitle balance .awb_mode must be in 'off'
camera.awb_gains=(0.56,1.27)#white balance (value_red, value_blue)
camera.resolution = (1920, 1080) #The maximum resolution (3280,2464) not run on raspberry by default it must increment GPU memory
#camera.brightness = 20 #Values between 0-100
camera.capture(stream, format='jpeg')
#Convert the picture into a numpy array
buff = np.fromstring(stream.getvalue(), dtype=np.uint8)
#Now creates an OpenCV image
img = cv2.imdecode(buff, 1)
cv2.imwrite('ngb.jpg',img)
#The order of matrix is in other different blue = [:,:,0], green = [:,:,1], red = [:,:,2]
#Suppose that NIR is in the channel blue by Rocco Filter
NIR = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]
#Convert the matrix in floating point of 32 bits
r = red.astype(np.float32)
nir = NIR.astype(np.float32)
# Tell numpy not to complain about division by 0:
np.seterr(invalid='ignore')
ndvi = (nir-r)/(nir+r) #calculate NDVI
ndviTrans = ndvi #Copy NDVI this way create other matrix with the same dimension
[m, n] = np.shape(ndvi) #get width and height number rows and colums
for i in xrange(1, m):
for j in xrange(1,n):
ndviTrans[i, j] = 127*(ndvi[i, j] + 1) #convert matrix of ndvi of -1 to 1 in 0 to 255
ndviTrans = np.uint8(ndviTrans)#change format to uint8
cv2.imwrite('ndvi.jpg',ndviTrans)
winname = 'ndvi'
#cv2.namedWindow(winname, cv2.WINDOW_NORMAL)
#ndviResize = cv2.resize(ndviTrans,(1000,640))
cv2.imshow(winname,ndviTrans)
cv2.waitKey(0)
cv2.destroyWindow(winname)
winname = 'ndvi with Color Map'
im_color = cv2.applyColorMap(ndviTrans, cv2.COLORMAP_JET)
cv2.imwrite('ndviColor.jpg',im_color)
cv2.imshow(winname,im_color)
cv2.waitKey(0)
cv2.destroyWindow(winname)
quit()