#pragma once #include "Utils/util.h" #include #include #include #include #include #include #include "opencv2/nonfree/nonfree.hpp" using namespace std; using namespace cv; // ============== NOTIFICATION =============== // //! image no. is encoded from 0, 2, ..., n-1. // //! // // =========================================== // class PointMatcher { public: PointMatcher(vector imgNameList, bool extraPoints) { featureDimension = 64; _imgNameList = imgNameList; _imgNum = imgNameList.size(); featureExtractor(extraPoints); }; public: void featureExtractor(bool extraPoints); void readfeatures(int imgIndex, vector &keyPts, Mat &descriptors, double ratio); void savefeatures(vector keyPts, Mat descriptors, string saveName); void loadImgSizeList(); void saveImgSizeList(); bool tentativeMatcher(int imgIndex1, int imgIndex2); bool featureMatcher(int imgIndex1, int imgIndex2, vector &pointSet1, vector &pointSet2); //! all the imgIndex start from 1 void saveMatchPts(int imgIndex1, int imgIndex2, vector pointSet1, vector pointSet2); bool loadMatchPts(int imgIndex1, int imgIndex2, vector &pointSet1, vector &pointSet2); void pointConvert(Mat_ homoMat, Point2d src, Point2d &dst); void drawMatches(int imgIndex1, int imgIndex2, vector pointSet1, vector pointSet2); public: vector _imgSizeList; vector _imgNameList; private: int _imgNum; int featureDimension; vector _keysFileList; };