我用的是opencv3.1.0,挺好用的,且和VS20115配置压迫简单很多。但是对于nonfree这个库不支持,所以我又下了一个opencv2.4.13的源代码包,用Cmake编译,工具下载:点击打开链接,首先是解压opencv的文件,然后用Cmake编译,这些详细过程我就不写了,网上资料一大把,编译器选择vs2015 win64或vs2015,都可以,这和系统没有关系。但是要和VS2015的配置相对应。一般在VS2015下选择Debug Win32或Debug x64。这就和上面选择的编译器相对应了。接下来参考点击打开链接配置VS2015,过程一模一样。nonfree就可以使用了。这是我的测试程序:
#include<opencv2\core\core.hpp>
#include<opencv2\features2d\features2d.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\nonfree\nonfree.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
system("color 2F"); //改变console字体颜色
//载入元图片并显示
Mat srcIamge1 = imread("C:\\Users\\wjch\\Desktop\\house.png", 1);
Mat srcIamge2 = imread("C:\\Users\\wjch\\Desktop\\tower.jpg", 1);
if (!srcIamge1.data||!srcIamge2.data)
{
printf("读取图片错误,请检查路径");
return false;
}
imshow("原始图1", srcIamge1);
imshow("原始图2", srcIamge2);
//定义要用到的变量和类
int minHassian = 400;//定义SURF中的hessian阈值特征点检测算子
SurfFeatureDetector detector(minHassian);//定义一个surfFeatureDetector(SURF)特征检测类对象
vector<KeyPoint>keypoints_1, keypoints_2;//vector模板类是可以存放任意类型的动态数组,能够增加和压缩数据
//调用detect函数检测SURF特征关键点,保存在vector容器中
detector.detect(srcIamge1, keypoints_1);
detector.detect(srcIamge2, keypoints_2);
//绘制特征关键点
Mat img_keypoints_1, img_keypoints_2;
drawKeypoints(srcIamge1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
drawKeypoints(srcIamge2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
//显示效果图
imshow("特征检测效果图1", img_keypoints_1);
imshow("特征检测效果图2", img_keypoints_2);
waitKey(0);
return 0;
}
测试结果:
提示:因为我的opencv3.1.0配置的vs2015下Debug x64,为了避免冲突和方便切换,opencv2.4.13配置为Debug Win32。