Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef FINDOBJECT_H_
00029 #define FINDOBJECT_H_
00030
00031 #include "find_object/FindObjectExp.h"
00032
00033 #include "find_object/DetectionInfo.h"
00034
00035 #include <QtCore/QObject>
00036 #include <QtCore/QString>
00037 #include <QtCore/QMap>
00038 #include <QtCore/QMultiMap>
00039 #include <QtCore/QPair>
00040 #include <QtCore/QVector>
00041 #include <QtGui/QTransform>
00042 #include <QtCore/QRect>
00043 #include <opencv2/opencv.hpp>
00044 #include <vector>
00045
00046 namespace find_object {
00047
00048 class ObjSignature;
00049 class Vocabulary;
00050 class KeypointDetector;
00051 class DescriptorExtractor;
00052
00053 class FINDOBJECT_EXP FindObject : public QObject
00054 {
00055 Q_OBJECT;
00056 public:
00057 static void affineSkew(float tilt,
00058 float phi,
00059 const cv::Mat & image,
00060 cv::Mat & skewImage,
00061 cv::Mat & skewMask,
00062 cv::Mat & Ai);
00063
00064 public:
00065 FindObject(QObject * parent = 0);
00066 virtual ~FindObject();
00067
00068 bool loadSession(const QString & path);
00069 bool saveSession(const QString & path);
00070 bool isSessionModified() const {return sessionModified_;}
00071
00072 int loadObjects(const QString & dirPath);
00073 const ObjSignature * addObject(const QString & filePath);
00074 const ObjSignature * addObject(const cv::Mat & image, int id=0, const QString & filename = QString());
00075 bool addObject(ObjSignature * obj);
00076 void removeObject(int id);
00077 void removeAllObjects();
00078
00079 bool detect(const cv::Mat & image, find_object::DetectionInfo & info);
00080
00081 void updateDetectorExtractor();
00082 void updateObjects(const QList<int> & ids = QList<int>());
00083 void updateVocabulary();
00084
00085 const QMap<int, ObjSignature*> & objects() const {return objects_;}
00086 const Vocabulary * vocabulary() const {return vocabulary_;}
00087
00088 public Q_SLOTS:
00089 void addObjectAndUpdate(const cv::Mat & image, int id=0, const QString & filename = QString());
00090 void removeObjectAndUpdate(int id);
00091 void detect(const cv::Mat & image);
00092
00093 Q_SIGNALS:
00094 void objectsFound(const find_object::DetectionInfo &);
00095
00096 private:
00097 void clearVocabulary();
00098
00099 private:
00100 QMap<int, ObjSignature*> objects_;
00101 Vocabulary * vocabulary_;
00102 QMap<int, cv::Mat> objectsDescriptors_;
00103 QMap<int, int> dataRange_;
00104 KeypointDetector * detector_;
00105 DescriptorExtractor * extractor_;
00106 bool sessionModified_;
00107 };
00108
00109 }
00110
00111 #endif