#include "stdafx.h" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/nonfree/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include <vector> #include<opencv2/legacy/legacy.hpp>//新版本这个一定要加 我这里是2.4.6版本 当然链接的lib文件也要加进来 void _tmain(int argc, _TCHAR* argv[]) { Mat input1=imread("d:/1.jpg",1); Mat input2=imread("d:/1.jpg",1); SiftFeatureDetector detector; vector<KeyPoint> keypoint1,keypoint2; detector.detect(input1,keypoint1); Mat output1; drawKeypoints(input1,keypoint1,output1); imshow("sift_result1.jpg",output1); imwrite("sift_result1.jpg",output1); Mat output2; SiftDescriptorExtractor extractor; Mat descriptor1,descriptor2; BruteForceMatcher<L2<float>> matcher; vector<DMatch> matches; Mat img_matches; detector.detect(input2,keypoint2); drawKeypoints(input2,keypoint2,output2); imshow("out",output2); imwrite("out",output2); extractor.compute(input1,keypoint1,descriptor1); extractor.compute(input2,keypoint2,descriptor2); matcher.match(descriptor1,descriptor2,matches); drawMatches(input1,keypoint1,input2,keypoint2,matches,img_matches); imshow("matches",img_matches); imwrite("matches.jpg",img_matches); waitKey(); }
SIFT特征
#include "stdafx.h" #include "highgui.h" #include "features2d/features2d.hpp" #include "opencv2/nonfree/features2d.hpp" #include <iostream> using namespace std; using namespace cv; void _tmain(int argc, _TCHAR* argv[]) { Mat image=imread("d:/1.jpg"); Mat iamgeGray=imread("d:/1.jpg",0); Mat descriptors; vector<KeyPoint> keypoints; SiftFeatureDetector sift2(0.06f,10.0); sift2.detect(iamgeGray,keypoints); drawKeypoints(image,keypoints,image,Scalar(255,0,255)); imshow("test",image); waitKey(); }