// opencv_test02.cpp : 定義控制台應用程式的進入點。//#include"stdafx.h"#include "stdafx.h"#include <opencv2/core/core.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/nonfree/features2d.hpp>#include <vector>#include <iostream>using namespace std;using namespace cv;// Load image from fileint main(int argc,char* argv[]){ IplImage *pLeftImage = cvLoadImage("e:\\tmp\\01.bmp", CV_LOAD_IMAGE_GRAYSCALE);IplImage *pRightImage = cvLoadImage("e:\\tmp\\02.bmp", CV_LOAD_IMAGE_GRAYSCALE); // Convert IplImage to cv::Mat Mat matLeftImage = Mat(pLeftImage, false); // Do not copy Mat matRightImage = Mat(pRightImage, false); // Key point and its descriptor vector<KeyPoint> LeftKey;vector<KeyPoint> RightKey; Mat LeftDescriptor;Mat RightDescriptor; vector<DMatch> Matches; // Detect key points from image FeatureDetector *pDetector = new SurfFeatureDetector; // 這裡我們用了SURF特徵點pDetector->detect(matLeftImage, LeftKey);pDetector->detect(matRightImage, RightKey); delete pDetector; // Extract descriptors DescriptorExtractor *pExtractor = new SurfDescriptorExtractor; // 提取SURF描述向量pExtractor->compute(matLeftImage, LeftKey, LeftDescriptor);pExtractor->compute(matRightImage, RightKey, RightDescriptor); delete pExtractor;// Matching features DescriptorMatcher *pMatcher = new FlannBasedMatcher; // 使用Flann匹配演算法pMatcher->match(LeftDescriptor, RightDescriptor, Matches); delete pMatcher; // Show resultMat OutImage;drawMatches(matLeftImage, LeftKey, matRightImage, RightKey, Matches, OutImage);cvNamedWindow( "Match features", 1);cvShowImage("Match features", &(IplImage(OutImage)));cvWaitKey( 0 );cvDestroyWindow( "Match features" );}