-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOLOR_DETECTION.py
102 lines (85 loc) · 3.77 KB
/
COLOR_DETECTION.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
99
100
101
102
###### How to use
# 1. run this file
# 2. keep object on camera capture region
# 3. Change HSV min and max till only intrested color visible
# NOTE: - keep while background for H and S selection then for fine tuning have some backround and then tune V value
# -
import cv2
import numpy as np
#dummy function which is usefull in Trackbar
def empty(a):
pass
# stacking different types of images and scaling it from previous lesson
def stackImages(scale,imgArray):
rows = len(imgArray)
cols = len(imgArray[0])
rowsAvailable = isinstance(imgArray[0], list)
width = imgArray[0][0].shape[1]
height = imgArray[0][0].shape[0]
if rowsAvailable:
for x in range ( 0, rows):
for y in range(0, cols):
if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
else:
imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
imageBlank = np.zeros((height, width, 3), np.uint8)
hor = [imageBlank]*rows
hor_con = [imageBlank]*rows
for x in range(0, rows):
hor[x] = np.hstack(imgArray[x])
ver = np.vstack(hor)
else:
for x in range(0, rows):
if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
else:
imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
hor= np.hstack(imgArray)
ver = hor
return ver
#creating trackbars to control Hue, Saturation and Value
#in opencv Maximum Hue is 179
# 0 16 11 255 53 255 default Setting this for red
# 0 49 80 255 32 255 for skin color
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",900,800)
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)
cv2.createTrackbar("Hue Max", "TrackBars", 179, 179, empty)
cv2.createTrackbar("Sat Min", "TrackBars", 0, 255, empty)
cv2.createTrackbar("Sat Max", "TrackBars", 255, 255, empty)
cv2.createTrackbar("Val Min", "TrackBars", 0, 255, empty)
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)
# read video from webcam
cap = cv2.VideoCapture(0) #0-> ID of the camera
cap.set(10,100) #10-> Brighness
# cap.set(3,640) #3-> width
# cap.set(4,480) #4-> height
#displaying video frame by frame
#this while loop we can replace with video / Webcam
while True:
success, img = cap.read()
# convering into HSV space
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")
h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")
s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")
s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")
v_min = cv2.getTrackbarPos("Val Min", "TrackBars")
v_max = cv2.getTrackbarPos("Val Max", "TrackBars")
# print(h_min, h_max, s_min, s_max, v_min, v_max)
# creating array of lower and upper values
lower = np.array([h_min,s_min,v_min])
upper = np.array([h_max,s_max,v_max])
# Creating mask of the image
mask = cv2.inRange(imgHSV,lower,upper)
# giving color to the mask by bit wise operation
imgResult = cv2.bitwise_and(img,img,mask=mask)
#displaying output
imgStack = stackImages(0.4,[img,mask,imgResult])
cv2.imshow("Stacked Images", imgStack)
# stop when video ends OR when user press 'q'
if cv2.waitKey(1) & 0xFF == ord('q'):
break