-
Notifications
You must be signed in to change notification settings - Fork 0
/
7_a_ColorDetection.py
90 lines (74 loc) · 3.27 KB
/
7_a_ColorDetection.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
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
path = 'Resources/tulips.png'
#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
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",900,800)
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)
cv2.createTrackbar("Hue Max", "TrackBars", 16, 179, empty)
cv2.createTrackbar("Sat Min", "TrackBars", 11, 255, empty)
cv2.createTrackbar("Sat Max", "TrackBars", 255, 255, empty)
cv2.createTrackbar("Val Min", "TrackBars", 53, 255, empty)
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)
# Reading Image
img = cv2.imread(path)
# convering into HSV space
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#this while loop we can replace with video / Webcam
while True:
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.6,([img,imgHSV],[mask,imgResult]))
cv2.imshow("Stacked Images", imgStack)
# cv2.imshow("Original image", img)
# cv2.imshow("HSV image", imgHSV)
cv2.waitKey(1)