Skip to content

Commit fc327ff

Browse files
Merge remote-tracking branch 'origin/master'
2 parents 76a49a2 + 22b4933 commit fc327ff

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

create_mask.cpp

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#include "opencv2/imgproc.hpp"
2+
#include "opencv2/imgcodecs.hpp"
3+
#include "opencv2/highgui.hpp"
4+
#include <iostream>
5+
6+
using namespace std;
7+
using namespace cv;
8+
9+
Mat src, img1, mask, final;
10+
11+
Point point;
12+
vector<Point> pts;
13+
int drag = 0;
14+
int var = 0;
15+
int flag = 0;
16+
17+
void mouseHandler(int, int, int, int, void*);
18+
19+
void mouseHandler(int event, int x, int y, int, void*)
20+
{
21+
22+
if (event == EVENT_LBUTTONDOWN && !drag)
23+
{
24+
if (flag == 0)
25+
{
26+
if (var == 0)
27+
img1 = src.clone();
28+
point = Point(x, y);
29+
circle(img1, point, 2, Scalar(0, 0, 255), -1, 8, 0);
30+
pts.push_back(point);
31+
var++;
32+
drag = 1;
33+
34+
if (var > 1)
35+
line(img1,pts[var-2], point, Scalar(0, 0, 255), 2, 8, 0);
36+
37+
imshow("Source", img1);
38+
}
39+
}
40+
41+
if (event == EVENT_LBUTTONUP && drag)
42+
{
43+
imshow("Source", img1);
44+
drag = 0;
45+
}
46+
47+
if (event == EVENT_RBUTTONDOWN)
48+
{
49+
flag = 1;
50+
img1 = src.clone();
51+
52+
if (var != 0)
53+
{
54+
polylines( img1, pts, 1, Scalar(0,0,0), 2, 8, 0);
55+
}
56+
57+
imshow("Source", img1);
58+
}
59+
60+
if (event == EVENT_RBUTTONUP)
61+
{
62+
flag = var;
63+
final = Mat::zeros(src.size(), CV_8UC3);
64+
mask = Mat::zeros(src.size(), CV_8UC1);
65+
66+
vector<vector<Point> > vpts;
67+
vpts.push_back(pts);
68+
fillPoly(mask, vpts, Scalar(255, 255, 255), 8, 0);
69+
bitwise_and(src, src, final, mask);
70+
imshow("Mask", mask);
71+
imshow("Result", final);
72+
imshow("Source", img1);
73+
}
74+
75+
if (event == EVENT_MBUTTONDOWN)
76+
{
77+
pts.clear();
78+
var = 0;
79+
drag = 0;
80+
flag = 0;
81+
imshow("Source", src);
82+
}
83+
}
84+
85+
int main(int argc, char **argv)
86+
{
87+
CommandLineParser parser(argc, argv, "{@input | lena.jpg | input image}");
88+
parser.about("This program demonstrates using mouse events\n");
89+
parser.printMessage();
90+
cout << "\n\tleft mouse button - set a point to create mask shape\n"
91+
"\tright mouse button - create mask from points\n"
92+
"\tmiddle mouse button - reset\n";
93+
String input_image = parser.get<String>("@input");
94+
95+
src = imread(samples::findFile(input_image));
96+
97+
if (src.empty())
98+
{
99+
printf("Error opening image: %s\n", input_image.c_str());
100+
return 0;
101+
}
102+
103+
namedWindow("Source", WINDOW_AUTOSIZE);
104+
setMouseCallback("Source", mouseHandler, NULL);
105+
imshow("Source", src);
106+
waitKey(0);
107+
108+
return 0;
109+
}

0 commit comments

Comments
 (0)