]> SALOME platform Git repositories - modules/geom.git/blob - src/ShapeRecognition/ShapeRec_FeatureDetector.hxx
Salome HOME
7a9a0cec0b2d7f2cfc4787b1068f9737b882643e
[modules/geom.git] / src / ShapeRecognition / ShapeRec_FeatureDetector.hxx
1 // Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 // File   : ShapeRec_FeatureDetector.h
24 // Author : Renaud NEDELEC, Open CASCADE S.A.S.
25
26 // OpenCV includes
27 // RNV: Workaround: HAVE_TBB definition from OCCT conflicts with OPENCV, undef it.
28 //      This workaround will be removed after correction of the
29 //      https://tracker.dev.opencascade.org/view.php?id=28457 issue.
30 #ifdef HAVE_TBB
31 #undef HAVE_TBB
32 #include <cv.h>
33 #include <highgui.h>
34 #include <opencv2/imgproc/imgproc.hpp>
35 #include <opencv2/highgui/highgui.hpp>
36 #define HAVE_TBB
37 #endif
38
39 // Qt
40 #include <QRect>
41
42 #ifdef WIN32
43   #if defined GEOM_SHAPEREC_EXPORTS || defined GEOMShapeRec_EXPORTS
44     #define GEOM_SHAPEREC_EXPORT __declspec( dllexport )
45   #else
46     #define GEOM_SHAPEREC_EXPORT __declspec( dllimport )
47   #endif
48 #else
49    #define GEOM_SHAPEREC_EXPORT
50 #endif
51
52 class GEOM_SHAPEREC_EXPORT ShapeRec_Parameters
53 {
54 public:
55   ShapeRec_Parameters();
56   virtual ~ShapeRec_Parameters();
57
58   int kernelSize;
59   int findContoursMethod;
60 };
61
62 class GEOM_SHAPEREC_EXPORT ShapeRec_CornersParameters : public ShapeRec_Parameters
63 {
64 public:
65   ShapeRec_CornersParameters();
66   virtual ~ShapeRec_CornersParameters();
67
68   double qualityLevel;
69   double minDistance;
70   int typeCriteria;
71   int maxIter;
72   double epsilon;
73 };
74
75 class GEOM_SHAPEREC_EXPORT ShapeRec_CannyParameters : public ShapeRec_Parameters
76 {
77 public:
78   ShapeRec_CannyParameters();
79   virtual ~ShapeRec_CannyParameters();
80   
81   int lowThreshold;
82   int ratio;
83   bool L2gradient;
84 };
85
86 class GEOM_SHAPEREC_EXPORT ShapeRec_ColorFilterParameters : public ShapeRec_Parameters
87 {
88 public:
89   ShapeRec_ColorFilterParameters();
90   virtual ~ShapeRec_ColorFilterParameters();
91
92   int smoothSize;
93   int* histSize;
94   int histType;
95   double threshold;
96   double maxThreshold;
97 };
98
99 class GEOM_SHAPEREC_EXPORT ShapeRec_FeatureDetector
100 {
101 public:
102   
103   typedef std::vector<cv::Point>               CvContour;
104   typedef std::vector<std::vector<cv::Point> > CvContoursArray;
105   
106   ShapeRec_FeatureDetector();                                            // Constructor
107   
108   void                    SetPath( const std::string& );                 // Sets the image path
109   void                    SetROI( const QRect& );                        // Sets a Region Of Interest in the image
110   CvPoint2D32f*           GetCorners()           { return corners;     };
111   CvContoursArray         GetContours()          { return contours;    };
112   std::vector<cv::Vec4i>  GetLines()             { return lines;       };
113   std::vector<cv::Vec4i>  GetContoursHierarchy() { return hierarchy;   };
114   int                     GetCornerCount()       { return cornerCount; };
115   int                     GetImgHeight()         { return imgHeight;   };
116   int                     GetImgWidth()          { return imgWidth;    };
117   
118   std::string             CroppImage();
119   void                    ComputeCorners( bool useROI = false, ShapeRec_Parameters* parameters = 0 );  // Detects the corners from the image located at imagePath
120   bool                    ComputeLines();                                                              // Detects the lines from the image located at imagePath
121   bool                    ComputeContours( bool useROI = false, ShapeRec_Parameters* parameters = 0 ); // Detects the contours from the image located at imagePath
122   
123   
124 private:
125   std::string             imagePath;
126   
127   CvPoint2D32f*           corners;
128   int                     cornerCount;
129   
130   CvContoursArray         contours;
131   std::vector<cv::Vec4i>  hierarchy;
132   std::vector<cv::Vec4i>  lines;
133   int                     imgHeight;
134   int                     imgWidth; 
135   CvRect                  rect;
136 };