openCV中的KeyPoints、DMatch、以及drawMatches函数(sift算法会用到的)
2017-02-23 11:16
1451 查看
1. keypoint类
/*! The Keypoint Class The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT, cv::LDetector etc. */ class KeyPoint { public: //! the default constructor默认构造函数 KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {} //! the full constructor KeyPoint(Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1) :pt(_pt), size(_size), angle(_angle), response(_response), octave(_octave), class_id(_class_id) {} //! another form of the full constructor KeyPoint(float x, float y, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1) :pt(x, y), size(_size), angle(_angle), response(_response), octave(_octave), class_id(_class_id) {} size_t hash() const; //! converts vector of keypoints to vector of points static void convert(const vector<KeyPoint>& keypoints, CV_OUT vector<Point2f>& points2f, const vector<int>& keypointIndexes=vector<int>()); //! converts vector of points to the vector of keypoints, where each keypoint is assigned the same size and the same orientation static void convert(const vector<Point2f>& points2f, CV_OUT vector<KeyPoint>& keypoints, float size=1, float response=1, int octave=0, int class_id=-1); //! computes overlap for pair of keypoints; //! overlap is a ratio between area of keypoint regions intersection and //! area of keypoint regions union (now keypoint region is circle) static float overlap(const KeyPoint& kp1, const KeyPoint& kp2); Point2f pt; //!<关键点坐标coordinates of the keypoints> float size; //!<关键点邻域直径大小diameter of the meaningful keypoint neighborhood float angle; //!<特征点方向computed orientation of the keypoint (-1 if not applicable); //!< it's in [0,360) degrees and measured relative to //!< image coordinate system, ie in clockwise. float response; //!< the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling int octave; //!<关键点所在的图像金字塔的组octave (pyramid layer) from which the keypoint has been extracted int class_id; //!<用于聚类的ID object class (if the keypoints need to be clustered by an object they belong to) };
2.Dmatch结构
/*************************************/ * DMatch * /*************************************/ /* Struct for matching: query b261 descriptor index, train descriptor index, train image index and distance between descriptors. */ struct DMatch { //有三个构造函数 DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {} DMatch( int _queryIdx, int _trainIdx, float _distance ) : queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {} DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) : queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {} CV_PROP_RW int queryIdx; //此匹配对应的查询图像的特征描述子索引 query descriptor index CV_PROP_RW int trainIdx; //此匹配对应的训练(模板)图像的特征描述子索引 train descriptor index CV_PROP_RW int imgIdx; //训练图像的索引(若有多个) train image index CV_PROP_RW float distance;//两个特征向量之间的欧氏距离,越小表明匹配度越高 // less is better bool operator<( const DMatch &m ) const { return distance < m.distance; } };
3.drawMatches函数
// Draws matches of keypints from two images on output image. void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1, const Mat& img2, const vector<KeyPoint>& keypoints2, const vector<DMatch>& matches1to2, Mat& outIm const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), const vector<char>& matchesMask=vector<char>(), int flags=DrawMatchesFlags::DEFAULT ); void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1, const Mat& img2, const vector<KeyPoint>& keypoints2, const vector<vector<DMatch> >& matches1to2, Mat& outImg, const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), const vector<vector<char> >& matchesMask=vector<vector<char> >(), int flags=DrawMatchesFlags::DEFAULT ); /* /*其中参数如下: * img1 – 源图像1 * keypoints1 –源图像1的特征点. * img2 – 源图像2. * keypoints2 – 源图像2的特征点 * matches1to2 – 源图像1的特征点匹配源图像2的特征点[matches[i]] . * outImg – 输出图像具体由flags决定. * matchColor – 匹配的颜色(特征点和连线),若matchColor==Scalar::all(-1),颜色随机. * singlePointColor – 单个点的颜色,即未配对的特征点,若matchColor==Scalar::all(-1),颜色随机. matchesMask – Mask决定哪些点将被画出,若为空,则画出所有匹配点. * flags – Fdefined by DrawMatchesFlags. */
相关文章推荐
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
- OpenCV4Android在2.x版本中不使用OpenCVManager以及编译SIFT算法实现
- OpenCV 基础- Mat IplImage 最近用到的一些转换 以及初始化
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
- OpenCV 基础- Mat IplImage 最近用到的一些转换 以及初始化
- Ubuntu下安装多个版本的opencv,以及切换使用
- opencv-python中 boundingRect(cnt)以及cv2.rectangle用法
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- vs2008 下配置 opencv2.0 的总结,以及 vc6 下配置 opencv1.0 的转帖
- OpenCV中寻找轮廓函数cvFindContours的使用说明以及序列cvSeq的用法说明
- Opencv2.0 lib和dll的编译获取过程 以及 vs2005,vs2008配置过程
- 随机数生成器以及OpenCV中的文本
- opencv笔记:检测轮廓,直线,圆以及直线拟合
- opencv学习_16(CvMat矩阵结构以及矩阵数据访问)
- Android-图像识别项目OpenCV(1):技术选型以及NDK搭建
- java web 中判断方法是否运行超时以及运行超时后的再次调用(用到了线程相关的知识)
- opencv中mat,cvmat,Iplimage构造体定义以及格式互相转换
- OpenCv3.0架构的详细解释以及新增新功能的说明(当然OpenCv3.2.0中的很多新功能更加强大,比如CNN,DNN的实现)
- 我的OpenCV学习笔记(19):检测轮廓,直线,圆以及直线拟合
- opencv_traincascade.exe用到的参数及解释