本人菜鸟一枚,刚刚接触opencv进行三维重建,在进行角点检测匹配的时候,遇到了harris角点匹配的问题,在教材中只提到harris角点的检测,却没有详细的关于harris角点匹配问题,完成角点检测以后,接下来就蒙圈了,不知道如何下手了,关于surf、sift两种检测匹配算法,在opencv3中都封装了相关的函数,包括计算特征点、描述子,而在harris的角点检测部分中没有描述子一说,这时候怎么办???无奈返回到opencv的头文件中去寻找关于匹配部分的函数。返回查找KeyPoint类下的函数,发现一个非常有意思的函数。如下:
CV_WRAP static void convert(const std::vector<Point2f>& points2f,
CV_OUT std::vector<KeyPoint>& keypoints,
float size=1, float response=1, int octave=0, int class_id=-1);
该函数告诉我们可以将harris检测到的Point2f类型的特征点转化为KeyPoint类型,其中关于尺度等等都做了初始化,于是乎可以将KeyPoint类型特征点作为sift的特征点,然后利用sift中的检测描述子函数来完成描述子的检测,最后可以和各种函数匹配函数组合来完成两张图中的harris角点匹配。
不多说了,直接上代码!
1.主函数
main.cpp文件
//--------------------------------------【程序说明】-------------------------------------------
// 程序说明:参考了《OpenCV3编程入门》OpenCV3版书本配套示例程序88
// 程序描述:亚像素级角点检测匹配
// 开发测试所用操作系统: Windows 7 64bit
// 开发测试所用IDE版本:Visual Studio 2010
// 开发测试所用OpenCV版本: 3.0 betarExtra
// 2014年11月 Created by @yiweixianyi
// 2014年12月 Revised by @yiweixianyi
//------------------------------------------------------------------------------------------------
//----------------------------