-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopencv_test.py
67 lines (54 loc) · 2.27 KB
/
opencv_test.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
import cv2, time
from PyQt5.QtCore import QThread, pyqtSignal
import numpy as np
class ColorDetectionModule(QThread):
color_detected = pyqtSignal(int)
def __init__(self):
super().__init__()
self.cap = cv2.VideoCapture(0)
self.is_running = True
def run(self):
while self.is_running:
_, frame = self.cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red1 = np.array([0, 100, 100])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
mask1 = cv2.inRange(hsv_frame, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_frame, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
red_pixel_count = cv2.countNonZero(mask)
if red_pixel_count >= 10:
self.color_detected.emit(red_pixel_count)
time.sleep(0.5)
def stop_detection(self):
self.is_running = False
self.cap.release()
def get_red_pixels(self):
_, frame = self.cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red1 = np.array([0, 100, 100])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
mask1 = cv2.inRange(hsv_frame, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_frame, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
red_pixel_count = cv2.countNonZero(mask)
return red_pixel_count
def stop_detection(self):
self.is_running = False
self.cap.release()
def get_red_pixels(self):
_, frame = self.cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red1 = np.array([0, 100, 100])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
mask1 = cv2.inRange(hsv_frame, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_frame, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
red_pixel_count = cv2.countNonZero(mask)
return red_pixel_count