5 #include <opencv2/opencv.hpp>
7 #include <vision_module/Tools/LineSegment.hpp>
8 #include <vision_module/Tools/General.hpp>
13 void CallBackFunc(
int event,
int x,
int y,
int flags,
void* userdata);
23 Vector<LineSegment> Lines;
25 int innerIndex, totalIndex;
31 "LineSegmentTester") :
32 name(_name), innerIndex(0), totalIndex(0), enable(
false), Max(_max)
34 Image = Mat::zeros(box, CV_8UC3);
37 setMouseCallback(name, CallBackFunc,
this);
39 inline bool IsReady(
size_t count)
41 return Lines.size() >= count;
45 return Lines.size() >= Max;
47 inline void Show(
int wait = 1)
49 for (
size_t i = 0; i < Lines.size(); i++)
51 line(Image, Lines[i].P1, Lines[i].P2, redColor(), 1);
55 circle(Image, p1, 2, yellowColor(), 2);
59 Image = Mat::zeros(Image.size(), CV_8UC3);
63 void CallBackFunc(
int event,
int x,
int y,
int flags,
void* userdata)
66 if (event == EVENT_LBUTTONDOWN)
68 if (data->innerIndex == 1 && data->Lines.size()<data->Max)
70 data->Lines.push_back(
LineSegment(data->p1, Point(x, y)));
74 else if (event == EVENT_RBUTTONDOWN)
77 if (data->Lines.size() > 0)
79 data->Lines.pop_back();
82 else if (event == EVENT_MBUTTONDOWN)
87 else if (event == EVENT_LBUTTONUP)
90 if (data->innerIndex == 0)
92 data->p1 = Point(x, y);
94 if (data->innerIndex == 1)
96 data->Lines[data->Lines.size() - 1].P1 = data->p1;
97 data->Lines[data->Lines.size() - 1].P2 = Point(x, y);
100 if (data->innerIndex > 1)
101 data->innerIndex = 0;
103 else if (event == EVENT_MOUSEMOVE)
107 if (data->innerIndex == 0)
109 data->p1 = Point(x, y);
111 if (data->innerIndex == 1)
113 data->Lines[data->Lines.size() - 1].P1 = data->p1;
114 data->Lines[data->Lines.size() - 1].P2 = Point(x, y);
A class representing line segments.
Definition: LineSegment.hpp:17
A class for visualize and test linesegments.
Definition: LineSegmentTester.hpp:19