Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hackassin
GitHub Repository: hackassin/learnopencv
Path: blob/master/ColorSpaces/interactiveColorSegment.py
3118 views
1
import cv2,time,argparse,glob
2
import numpy as np
3
4
#global variable to keep track of
5
show = False
6
7
def onTrackbarActivity(x):
8
global show
9
show = True
10
pass
11
12
13
if __name__ == '__main__' :
14
15
# Get the filename from the command line
16
files = glob.glob('images/rub*.jpg')
17
files.sort()
18
# load the image
19
original = cv2.imread(files[0])
20
#Resize the image
21
rsize = 250
22
original = cv2.resize(original,(rsize,rsize))
23
24
#position on the screen where the windows start
25
initialX = 50
26
initialY = 50
27
28
#creating windows to display images
29
cv2.namedWindow('P-> Previous, N-> Next',cv2.WINDOW_AUTOSIZE)
30
cv2.namedWindow('SelectBGR',cv2.WINDOW_AUTOSIZE)
31
cv2.namedWindow('SelectHSV',cv2.WINDOW_AUTOSIZE)
32
cv2.namedWindow('SelectYCB',cv2.WINDOW_AUTOSIZE)
33
cv2.namedWindow('SelectLAB',cv2.WINDOW_AUTOSIZE)
34
35
#moving the windows to stack them horizontally
36
cv2.moveWindow('P-> Previous, N-> Next',initialX,initialY)
37
cv2.moveWindow('SelectBGR',initialX + (rsize + 5),initialY)
38
cv2.moveWindow('SelectHSV',initialX + 2*(rsize + 5),initialY)
39
cv2.moveWindow('SelectYCB',initialX + 3*(rsize + 5),initialY)
40
cv2.moveWindow('SelectLAB',initialX + 4*(rsize + 5),initialY)
41
42
#creating trackbars to get values for YCrCb
43
cv2.createTrackbar('CrMin','SelectYCB',0,255,onTrackbarActivity)
44
cv2.createTrackbar('CrMax','SelectYCB',0,255,onTrackbarActivity)
45
cv2.createTrackbar('CbMin','SelectYCB',0,255,onTrackbarActivity)
46
cv2.createTrackbar('CbMax','SelectYCB',0,255,onTrackbarActivity)
47
cv2.createTrackbar('YMin','SelectYCB',0,255,onTrackbarActivity)
48
cv2.createTrackbar('YMax','SelectYCB',0,255,onTrackbarActivity)
49
50
#creating trackbars to get values for HSV
51
cv2.createTrackbar('HMin','SelectHSV',0,180,onTrackbarActivity)
52
cv2.createTrackbar('HMax','SelectHSV',0,180,onTrackbarActivity)
53
cv2.createTrackbar('SMin','SelectHSV',0,255,onTrackbarActivity)
54
cv2.createTrackbar('SMax','SelectHSV',0,255,onTrackbarActivity)
55
cv2.createTrackbar('VMin','SelectHSV',0,255,onTrackbarActivity)
56
cv2.createTrackbar('VMax','SelectHSV',0,255,onTrackbarActivity)
57
58
#creating trackbars to get values for BGR
59
cv2.createTrackbar('BGRBMin','SelectBGR',0,255,onTrackbarActivity)
60
cv2.createTrackbar('BGRBMax','SelectBGR',0,255,onTrackbarActivity)
61
cv2.createTrackbar('BGRGMin','SelectBGR',0,255,onTrackbarActivity)
62
cv2.createTrackbar('BGRGMax','SelectBGR',0,255,onTrackbarActivity)
63
cv2.createTrackbar('BGRRMin','SelectBGR',0,255,onTrackbarActivity)
64
cv2.createTrackbar('BGRRMax','SelectBGR',0,255,onTrackbarActivity)
65
66
#creating trackbars to get values for LAB
67
cv2.createTrackbar('LABLMin','SelectLAB',0,255,onTrackbarActivity)
68
cv2.createTrackbar('LABLMax','SelectLAB',0,255,onTrackbarActivity)
69
cv2.createTrackbar('LABAMin','SelectLAB',0,255,onTrackbarActivity)
70
cv2.createTrackbar('LABAMax','SelectLAB',0,255,onTrackbarActivity)
71
cv2.createTrackbar('LABBMin','SelectLAB',0,255,onTrackbarActivity)
72
cv2.createTrackbar('LABBMax','SelectLAB',0,255,onTrackbarActivity)
73
74
# show all images initially
75
cv2.imshow('SelectHSV',original)
76
cv2.imshow('SelectYCB',original)
77
cv2.imshow('SelectLAB',original)
78
cv2.imshow('SelectBGR',original)
79
i = 0
80
while(1):
81
82
cv2.imshow('P-> Previous, N-> Next',original)
83
k = cv2.waitKey(1) & 0xFF
84
85
# check next image in folder
86
if k == ord('n'):
87
i += 1
88
original = cv2.imread(files[i%len(files)])
89
original = cv2.resize(original,(rsize,rsize))
90
show = True
91
92
# check previous image in folder
93
elif k == ord('p'):
94
i -= 1
95
original = cv2.imread(files[i%len(files)])
96
original = cv2.resize(original,(rsize,rsize))
97
show = True
98
# Close all windows when 'esc' key is pressed
99
elif k == 27:
100
break
101
102
if show: # If there is any event on the trackbar
103
show = False
104
105
# Get values from the BGR trackbar
106
BMin = cv2.getTrackbarPos('BGRBMin','SelectBGR')
107
GMin = cv2.getTrackbarPos('BGRGMin','SelectBGR')
108
RMin = cv2.getTrackbarPos('BGRRMin','SelectBGR')
109
BMax = cv2.getTrackbarPos('BGRBMax','SelectBGR')
110
GMax = cv2.getTrackbarPos('BGRGMax','SelectBGR')
111
RMax = cv2.getTrackbarPos('BGRRMax','SelectBGR')
112
minBGR = np.array([BMin, GMin, RMin])
113
maxBGR = np.array([BMax, GMax, RMax])
114
115
# Get values from the HSV trackbar
116
HMin = cv2.getTrackbarPos('HMin','SelectHSV')
117
SMin = cv2.getTrackbarPos('SMin','SelectHSV')
118
VMin = cv2.getTrackbarPos('VMin','SelectHSV')
119
HMax = cv2.getTrackbarPos('HMax','SelectHSV')
120
SMax = cv2.getTrackbarPos('SMax','SelectHSV')
121
VMax = cv2.getTrackbarPos('VMax','SelectHSV')
122
minHSV = np.array([HMin, SMin, VMin])
123
maxHSV = np.array([HMax, SMax, VMax])
124
125
# Get values from the LAB trackbar
126
LMin = cv2.getTrackbarPos('LABLMin','SelectLAB')
127
AMin = cv2.getTrackbarPos('LABAMin','SelectLAB')
128
BMin = cv2.getTrackbarPos('LABBMin','SelectLAB')
129
LMax = cv2.getTrackbarPos('LABLMax','SelectLAB')
130
AMax = cv2.getTrackbarPos('LABAMax','SelectLAB')
131
BMax = cv2.getTrackbarPos('LABBMax','SelectLAB')
132
minLAB = np.array([LMin, AMin, BMin])
133
maxLAB = np.array([LMax, AMax, BMax])
134
135
# Get values from the YCrCb trackbar
136
YMin = cv2.getTrackbarPos('YMin','SelectYCB')
137
CrMin = cv2.getTrackbarPos('CrMin','SelectYCB')
138
CbMin = cv2.getTrackbarPos('CbMin','SelectYCB')
139
YMax = cv2.getTrackbarPos('YMax','SelectYCB')
140
CrMax = cv2.getTrackbarPos('CrMax','SelectYCB')
141
CbMax = cv2.getTrackbarPos('CbMax','SelectYCB')
142
minYCB = np.array([YMin, CrMin, CbMin])
143
maxYCB = np.array([YMax, CrMax, CbMax])
144
145
# Convert the BGR image to other color spaces
146
imageBGR = np.copy(original)
147
imageHSV = cv2.cvtColor(original,cv2.COLOR_BGR2HSV)
148
imageYCB = cv2.cvtColor(original,cv2.COLOR_BGR2YCrCb)
149
imageLAB = cv2.cvtColor(original,cv2.COLOR_BGR2LAB)
150
151
# Create the mask using the min and max values obtained from trackbar and apply bitwise and operation to get the results
152
maskBGR = cv2.inRange(imageBGR,minBGR,maxBGR)
153
resultBGR = cv2.bitwise_and(original, original, mask = maskBGR)
154
155
maskHSV = cv2.inRange(imageHSV,minHSV,maxHSV)
156
resultHSV = cv2.bitwise_and(original, original, mask = maskHSV)
157
158
maskYCB = cv2.inRange(imageYCB,minYCB,maxYCB)
159
resultYCB = cv2.bitwise_and(original, original, mask = maskYCB)
160
161
maskLAB = cv2.inRange(imageLAB,minLAB,maxLAB)
162
resultLAB = cv2.bitwise_and(original, original, mask = maskLAB)
163
164
# Show the results
165
cv2.imshow('SelectBGR',resultBGR)
166
cv2.imshow('SelectYCB',resultYCB)
167
cv2.imshow('SelectLAB',resultLAB)
168
cv2.imshow('SelectHSV',resultHSV)
169
170
cv2.destroyAllWindows()
171
172
173