一个物体,不管远近以及角度如何,我们人都能判断为同一物体,因为我们人脑是根据物体的特征来判断是不是同一物体的,计算机在处理图像时,我们也希望具备这样的能力,所以需要对图像进行特征提取。
本文给出利用OpenCV的SIFT类来进行图像的特征提取与匹配的代码。
由于OpenCV3.0没有编译nonfree,而SIFT类包含在这个模块中,所以我们使用OpenCV2.4.9。
OpenCV2.4.9的Windows版安装包下载链接及配置方法请搜索公众号"qxsf321",关注后回复0045获取!
代码如下:
图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!
代码中用到的图像下载链接:https://pan.baidu.com/s/1eSAPnVG 密码:usrm
//opencv版本:OpenCV2.4.9
//VS版本:VS2012
//Author:qxsf321.net
#include <highgui/highgui.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/legacy/legacy.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat image01=imread("17.jpg");
Mat image02=imread("18.jpg");
Mat image1,image2;
GaussianBlur(image01,image1,Size(3,3),0.5);
GaussianBlur(image02,image2,Size(3,3),0.5);
//提取特征点
SiftFeatureDetector siftDetector(30); //30为检测算子的阀值
vector<KeyPoint> keyPoint1,keyPoint2;
siftDetector.detect(image1,keyPoint1);
siftDetector.detect(image2,keyPoint2);
//绘制特征点
drawKeypoints(image1,keyPoint1,image1,Scalar::all(-1),DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
drawKeypoints(