ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_contour.h
Go to the documentation of this file.
1 /************************************
2  * added: 20.07.2021 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_CONTOUR_H
10 #define D_CONTOUR_H
11 
12 //own
13 #include <d_enum.h>
14 
15 //general
16 #include <vector>
17 #include <thread>
18 
19 //Qt
20 #include <QString>
21 #include <QDebug>
22 
23 //openCV
24 #include <opencv2/core/core.hpp>
25 #include <opencv2/highgui/highgui.hpp>
26 #include <opencv2/imgproc/imgproc.hpp>
27 #include "opencv2/stitching.hpp"
28 
29 //namespaces
30 using namespace std;
31 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
32 #include <d_opencv_typedefs.h>
33 
38 class D_Contour
39 {
40 public:
41  D_Contour();
42  D_Contour(vector<Point> contour);
43  D_Contour(Rect box);
44 
45  D_Contour offset(Point PO);
46 
47  void set_contour(vector<Point> contour);
48 
49  vector<Point> contour() {return m_contour_points;}
50  vector<Point> contour(Point P_Offset);
51  QString contour_string();
52 
53  bool empty() {return m_n <= 0;}
54  size_t size() {return m_n;}
55 
56  int l();
57  int r();
58  int b();
59  int t();
60  int w() {return r() - l();}
61  int h() {return b() - t();}
62  Point tl() {return Point(l(), t());}
63  Point tr() {return Point(r(), t());}
64  Point bl() {return Point(l(), b());}
65  Point br() {return Point(r(), b());}
66  Point point(size_t i) {return i < m_n ? m_contour_points[i] : Point(0, 0);}
67  Point point(size_t i, Point offset) {return point(i) + offset;}
68  Point point(size_t i, double scale) {return point(i) * scale;}
69  Point point(size_t i, double scale, Point offset) {return point(i, scale) + offset;}
70 
71  Rect bounding_box() {return Rect(tl(), br());}
72  Rect bounding_box(D_Contour contour_merge);
73 
74  double area();
75  double perimeter();
76 
77  vector<D_Contour> intersections(D_Contour C2);
78  double intersection_area(D_Contour C2);
79  double intersection_area_relative(D_Contour C2);
80 
81 private:
82 
83  void calc_left_right();
84  void calc_top_bottom();
85 
86  vector<Point> m_contour_points;
87  size_t m_n = 0;
88  int m_left = INT_MIN;
89  int m_right = INT_MAX;
90  int m_top = INT_MIN;
91  int m_bottom = INT_MAX;
92  double m_area = 0;
93  double m_perimeter = 0;
94 
95  bool state_contour_set = false;
96  bool state_calced_left = false;
97  bool state_calced_right = false;
98  bool state_calced_top = false;
99  bool state_calced_bottom = false;
100  bool state_calced_area = false;
101  bool state_calced_perimeter = false;
102 };
103 
104 #endif // D_CONTOUR_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
D_Contour::tr
Point tr()
Definition: d_contour.h:63
D_Contour::point
Point point(size_t i, double scale)
Definition: d_contour.h:68
Rect
cv::Rect Rect
Definition: d_opencv_typedefs.h:65
D_Contour::t
int t()
Definition: d_contour.cpp:115
D_Contour::point
Point point(size_t i, Point offset)
Definition: d_contour.h:67
D_Contour::intersection_area_relative
double intersection_area_relative(D_Contour C2)
Definition: d_contour.cpp:299
D_Contour::contour
vector< Point > contour()
Definition: d_contour.h:49
D_Contour::perimeter
double perimeter()
Definition: d_contour.cpp:156
D_Contour::l
int l()
Definition: d_contour.cpp:82
Point
cv::Point Point
Definition: d_opencv_typedefs.h:35
D_Contour
The D_Contour class represents a contour of a 2D object and offers several methods for gaining inform...
Definition: d_contour.h:39
D_Contour::empty
bool empty()
Definition: d_contour.h:53
D_Contour::size
size_t size()
Definition: d_contour.h:54
CHAIN_APPROX_SIMPLE
const int CHAIN_APPROX_SIMPLE
Definition: d_opencv_typedefs.h:100
D_Contour::bl
Point bl()
Definition: d_contour.h:64
D_Contour::r
int r()
Definition: d_contour.cpp:93
D_Contour::point
Point point(size_t i, double scale, Point offset)
Definition: d_contour.h:69
RETR_TREE
const int RETR_TREE
Definition: d_opencv_typedefs.h:97
Scalar
cv::Scalar Scalar
Definition: d_opencv_typedefs.h:30
D_Contour::br
Point br()
Definition: d_contour.h:65
D_Contour::intersection_area
double intersection_area(D_Contour C2)
Definition: d_contour.cpp:236
D_Contour::w
int w()
Definition: d_contour.h:60
D_Contour::h
int h()
Definition: d_contour.h:61
D_Contour::offset
D_Contour offset(Point PO)
Definition: d_contour.cpp:48
D_Contour::D_Contour
D_Contour()
Definition: d_contour.cpp:11
d_contour.h
D_Contour::area
double area()
Definition: d_contour.cpp:142
D_Contour::tl
Point tl()
Definition: d_contour.h:62
D_Contour::contour_string
QString contour_string()
Definition: d_contour.cpp:69
D_Contour::bounding_box
Rect bounding_box()
Definition: d_contour.h:71
d_opencv_typedefs.h
D_Contour::point
Point point(size_t i)
Definition: d_contour.h:66
d_enum.h
D_Contour::b
int b()
Definition: d_contour.cpp:104
D_Contour::intersections
vector< D_Contour > intersections(D_Contour C2)
Definition: d_contour.cpp:170
D_Contour::set_contour
void set_contour(vector< Point > contour)
Definition: d_contour.cpp:53