Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hackassin
GitHub Repository: hackassin/learnopencv
Path: blob/master/ColorSpaces/interactiveColorSegment.cpp
3118 views
1
#include "opencv2/opencv.hpp"
2
#include <iostream>
3
#include <cstring>
4
5
using namespace cv;
6
using namespace std;
7
// global variable to keep track of
8
bool show = false;
9
10
11
// Create a callback for event on trackbars
12
void onTrackbarActivity(int pos, void* userdata){
13
// Just uodate the global variable that there is an event
14
show = true;
15
return;
16
}
17
18
19
int main(int argc, char **argv)
20
{
21
int image_number = 0;
22
int nImages = 10;
23
if(argc > 1)
24
nImages = atoi(argv[1]);
25
char filename[20];
26
sprintf(filename,"images/rub%02d.jpg",image_number%nImages);
27
28
Mat original = imread(filename);
29
30
// image resize width and height
31
int resizeHeight = 250;
32
int resizeWidth = 250;
33
Size rsize(resizeHeight,resizeWidth);
34
resize(original, original, rsize);
35
36
// position on the screen where the windows start
37
int initialX = 50;
38
int initialY = 50;
39
40
// creating windows to display images
41
namedWindow("P-> Previous, N-> Next", WINDOW_AUTOSIZE);
42
namedWindow("SelectBGR", WINDOW_AUTOSIZE);
43
namedWindow("SelectHSV", WINDOW_AUTOSIZE);
44
namedWindow("SelectYCB", WINDOW_AUTOSIZE);
45
namedWindow("SelectLAB", WINDOW_AUTOSIZE);
46
47
// moving the windows to stack them horizontally
48
moveWindow("P-> Previous, N-> Next", initialX, initialY);
49
moveWindow("SelectBGR", initialX + 1 * (resizeWidth + 5), initialY);
50
moveWindow("SelectHSV", initialX + 2 * (resizeWidth + 5), initialY);
51
moveWindow("SelectYCB", initialX + 3 * (resizeWidth + 5), initialY);
52
moveWindow("SelectLAB", initialX + 4 * (resizeWidth + 5), initialY);
53
54
// creating trackbars to get values for YCrCb
55
createTrackbar("CrMin", "SelectYCB", 0, 255, onTrackbarActivity);
56
createTrackbar("CrMax", "SelectYCB", 0, 255, onTrackbarActivity);
57
createTrackbar("CbMin", "SelectYCB", 0, 255, onTrackbarActivity);
58
createTrackbar("CbMax", "SelectYCB", 0, 255, onTrackbarActivity);
59
createTrackbar("YMin", "SelectYCB", 0, 255, onTrackbarActivity);
60
createTrackbar("YMax", "SelectYCB", 0, 255, onTrackbarActivity);
61
62
// creating trackbars to get values for HSV
63
createTrackbar("HMin", "SelectHSV", 0, 180, onTrackbarActivity);
64
createTrackbar("HMax", "SelectHSV", 0, 180, onTrackbarActivity);
65
createTrackbar("SMin", "SelectHSV", 0, 255, onTrackbarActivity);
66
createTrackbar("SMax", "SelectHSV", 0, 255, onTrackbarActivity);
67
createTrackbar("VMin", "SelectHSV", 0, 255, onTrackbarActivity);
68
createTrackbar("VMax", "SelectHSV", 0, 255, onTrackbarActivity);
69
70
// creating trackbars to get values for BGR
71
createTrackbar("BMin", "SelectBGR", 0, 255, onTrackbarActivity);
72
createTrackbar("BMax", "SelectBGR", 0, 255, onTrackbarActivity);
73
createTrackbar("GMin", "SelectBGR", 0, 255, onTrackbarActivity);
74
createTrackbar("GMax", "SelectBGR", 0, 255, onTrackbarActivity);
75
createTrackbar("RMin", "SelectBGR", 0, 255, onTrackbarActivity);
76
createTrackbar("RMax", "SelectBGR", 0, 255, onTrackbarActivity);
77
78
// creating trackbars to get values for LAB
79
createTrackbar("LMin", "SelectLAB", 0, 255, onTrackbarActivity);
80
createTrackbar("LMax", "SelectLAB", 0, 255, onTrackbarActivity);
81
createTrackbar("AMin", "SelectLAB", 0, 255, onTrackbarActivity);
82
createTrackbar("AMax", "SelectLAB", 0, 255, onTrackbarActivity);
83
createTrackbar("BMin", "SelectLAB", 0, 255, onTrackbarActivity);
84
createTrackbar("BMax", "SelectLAB", 0, 255, onTrackbarActivity);
85
86
// show all images initially
87
imshow("SelectHSV", original);
88
imshow("SelectYCB", original);
89
imshow("SelectLAB", original);
90
imshow("SelectBGR", original);
91
92
// declare local variables
93
int BMin, GMin, RMin;
94
int BMax, GMax, RMax;
95
Scalar minBGR, maxBGR;
96
97
int HMin, SMin, VMin;
98
int HMax, SMax, VMax;
99
Scalar minHSV, maxHSV;
100
101
int LMin, aMin, bMin;
102
int LMax, aMax, bMax;
103
Scalar minLab, maxLab;
104
105
int YMin, CrMin, CbMin;
106
int YMax, CrMax, CbMax;
107
Scalar minYCrCb, maxYCrCb;
108
109
Mat imageBGR, imageHSV, imageLab, imageYCrCb;
110
Mat maskBGR, maskHSV, maskLab, maskYCrCb;
111
Mat resultBGR, resultHSV, resultLab, resultYCrCb;
112
113
char k;
114
while (1){
115
imshow("P-> Previous, N-> Next", original);
116
k = waitKey(1) & 0xFF;
117
//Check next image in the folder
118
if (k =='n')
119
{
120
image_number++;
121
sprintf(filename,"images/rub%02d.jpg",image_number%nImages);
122
original = imread(filename);
123
resize(original,original,rsize);
124
show = true;
125
}
126
//Check previous image in he folder
127
else if (k =='p')
128
{
129
image_number--;
130
sprintf(filename,"images/rub%02d.jpg",image_number%nImages);
131
original = imread(filename);
132
resize(original,original,rsize);
133
show = true;
134
}
135
136
// Close all windows when 'esc' key is pressed
137
if (k == 27){
138
break;
139
}
140
141
if (show) { //If there is any event on the trackbar
142
show = false;
143
144
// Get values from the BGR trackbar
145
BMin = getTrackbarPos("BMin", "SelectBGR");
146
GMin = getTrackbarPos("GMin", "SelectBGR");
147
RMin = getTrackbarPos("RMin", "SelectBGR");
148
149
BMax = getTrackbarPos("BMax", "SelectBGR");
150
GMax = getTrackbarPos("GMax", "SelectBGR");
151
RMax = getTrackbarPos("RMax", "SelectBGR");
152
153
minBGR = Scalar(BMin, GMin, RMin);
154
maxBGR = Scalar(BMax, GMax, RMax);
155
156
// Get values from the HSV trackbar
157
HMin = getTrackbarPos("HMin", "SelectHSV");
158
SMin = getTrackbarPos("SMin", "SelectHSV");
159
VMin = getTrackbarPos("VMin", "SelectHSV");
160
161
HMax = getTrackbarPos("HMax", "SelectHSV");
162
SMax = getTrackbarPos("SMax", "SelectHSV");
163
VMax = getTrackbarPos("VMax", "SelectHSV");
164
165
minHSV = Scalar(HMin, SMin, VMin);
166
maxHSV = Scalar(HMax, SMax, VMax);
167
168
// Get values from the LAB trackbar
169
LMin = getTrackbarPos("LMin", "SelectLAB");
170
aMin = getTrackbarPos("AMin", "SelectLAB");
171
bMin = getTrackbarPos("BMin", "SelectLAB");
172
173
LMax = getTrackbarPos("LMax", "SelectLAB");
174
aMax = getTrackbarPos("AMax", "SelectLAB");
175
bMax = getTrackbarPos("BMax", "SelectLAB");
176
177
minLab = Scalar(LMin, aMin, bMin);
178
maxLab = Scalar(LMax, aMax, bMax);
179
180
// Get values from the YCrCb trackbar
181
YMin = getTrackbarPos("YMin", "SelectYCB");
182
CrMin = getTrackbarPos("CrMin", "SelectYCB");
183
CbMin = getTrackbarPos("CbMin", "SelectYCB");
184
185
YMax = getTrackbarPos("YMax", "SelectYCB");
186
CrMax = getTrackbarPos("CrMax", "SelectYCB");
187
CbMax = getTrackbarPos("CbMax", "SelectYCB");
188
189
minYCrCb = Scalar(YMin, CrMin, CbMin);
190
maxYCrCb = Scalar(YMax, CrMax, CbMax);
191
192
// Convert the BGR image to other color spaces
193
original.copyTo(imageBGR);
194
cvtColor(original, imageHSV, COLOR_BGR2HSV);
195
cvtColor(original, imageYCrCb, COLOR_BGR2YCrCb);
196
cvtColor(original, imageLab, COLOR_BGR2Lab);
197
198
// Create the mask using the min and max values obtained from trackbar and apply bitwise and operation to get the results
199
inRange(imageBGR, minBGR, maxBGR, maskBGR);
200
resultBGR = Mat::zeros(original.rows, original.cols, CV_8UC3);
201
bitwise_and(original, original, resultBGR, maskBGR);
202
203
inRange(imageHSV, minHSV, maxHSV, maskHSV);
204
resultHSV = Mat::zeros(original.rows, original.cols, CV_8UC3);
205
bitwise_and(original, original, resultHSV, maskHSV);
206
207
inRange(imageYCrCb, minYCrCb, maxYCrCb, maskYCrCb);
208
resultYCrCb = Mat::zeros(original.rows, original.cols, CV_8UC3);
209
bitwise_and(original, original, resultYCrCb, maskYCrCb);
210
211
inRange(imageLab, minLab, maxLab, maskLab);
212
resultLab = Mat::zeros(original.rows, original.cols, CV_8UC3);
213
bitwise_and(original, original, resultLab, maskLab);
214
215
// Show the results
216
imshow("SelectBGR", resultBGR);
217
imshow("SelectYCB", resultYCrCb);
218
imshow("SelectLAB", resultLab);
219
imshow("SelectHSV", resultHSV);
220
}
221
}
222
destroyAllWindows();
223
return 0;
224
}
225