-
Notifications
You must be signed in to change notification settings - Fork 0
/
vision.py
98 lines (83 loc) · 2.31 KB
/
vision.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import cv2
import numpy as np
import base64
class Vision:
def __init__(self):
self.cap = cv2.VideoCapture(0)
self.frame = None
self.ret = None
def readFrame(self):
"""
Lee el frame.
"""
self.ret, self.frame = self.cap.read()
return
def getFrame(self):
"""
Devuelve el frame actual .
"""
return self.frame
def getEncodedImage(self, image):
retval, buffer = cv2.imencode('.jpg', image)
encodedImage = base64.b64encode(buffer).decode('utf-8')
return encodedImage
def showFrame(self, frame):
"""
Muestra el frame.
"""
if self.ret == True:
cv2.imshow('Orig', frame)
return
def drawCenterLine(self):
cv2.line(self.frame, (0, 220), (680, 220), (0, 255, 0), thickness=2)
def waitForKey(self, key):
"""
Devuelve True si la tecla enviada como parámetro fué presionada.
"""
return cv2.waitKey(1) & 0xFF == ord(key)
def getStringData(self, frame):
"""
Devuelve un string del buffer pasado por parámetro capturado.
"""
imgEncode = cv2.imencode('.jpg', frame)[1]
return imgEncode.tostring()
def rotateImage(self):
"""
Rota la imágen 90 grados.
"""
self.frame = cv2.rotate(self.frame, cv2.ROTATE_180)
def cutBorders(self, p1, p2, p3, p4, verb):
"""
Corta los bordes del frame, eliminando bordes innecesarios
p1: array, Coordenada x, y del punto 1
p2: array, Coordenada x, y del punto 2
p3: array, Coordenada x, y del punto 3
p4: array, Coordenada x, y del punto 4
verb: boolean, Muestra los puntos a cortar sobre la imágen
sin efectuar el corte.
"""
if verb:
self.dibujarPunto(p1[0], p1[1]);
self.dibujarPunto(p2[0], p2[1]);
self.dibujarPunto(p3[0], p3[1]);
self.dibujarPunto(p4[0], p4[1]);
else:
pts1 = np.float32([p1, p2, p3, p4])
pts2 = np.float32([[0,0], [640, 0], [0,480],[640,480]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
self.frame = cv2.warpPerspective(self.frame, matrix, (640, 480))
def dibujarLinea(self):
"""
Dibuja una línea en el centro de la pantalla.
"""
cv2.line(self.frame, (0 , 230), (640 , 230), (100,155,30), 3)
def dibujarPunto(self, x, y):
"""
Dibuja un punto en las coordenadas especificadas.
x: int, Coordenada X.
y: int, Coordenada Y.
"""
cv2.circle(self.frame, (x,y), 7, (0, 255, 0), -1)
def destroy(self):
self.cap.release()
cv2.destroyAllWindows()