OPENCV 에서 SIFT 라이브러리를 사용하여 이미지를 일치시키는 루틴
// opencv_empty_proj.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//
# "stdafx.h" 포함
# include & ltopencv2/opencv.hpp >
# include & ltopencv2/features2d/features2d.hpp >
# include & lt open cv2/nonfree/nonfree.hpp >
# include & ltopencv2/legacy/legacy.hpp >
# include & ltvector & gt
네임스페이스 STD 사용
네임스페이스 cv 사용
Int _tmain(int argc, _TCHAR* argv[])
{
Const char * imagename = "img.jpg
//파일에서 이미지 읽기
Matimg = imread (imagename);
Matimg2 = imread ("img2.jpg");
//이미지를 읽지 못하면 ,
If(img.empty ())
{
Fprintf(stderr, "이미지% s 을 (를) 로드할 수 없습니다. \ n", imagename);
리턴-1;
}
If(img2.empty ())
{
Fprintf(stderr, "이미지% s 을 (를) 로드할 수 없습니다. \ n", imagename);
리턴-1;
}
//이미지 표시
Imshow (전면 이미지, img);
Imshow("image2 before ",img2);
//sift 피쳐 체크
SiftFeatureDetector
벡터< 중요 팁 & gtkp 1, kp2
Siftdtc.detect(img, KP1);
Matoutimg1;
DrawKeypoints(img, KP 1, outimg1);
Imshow("image 1 keypoints ",outimg1);
키 KP;
벡터< 중요 팁> 반복 프로그램 itvc
For (itvc = KP1.begin (); Itvc! = KP1.end (); Itvc++)
{
Cout & lt& lt "각도:"<& ltitvc-& gt;; 각도<<& lt" \ t "<& ltitvc-& gt;; Class _ id<< "\ t"< & ltitvc-> Octave & lt< "\ t"< & ltitvc-> Pt<< "\ t"< & ltitvc-> 응답<& ltendl
}
Siftdtc.detect(img2, kp2);
Mat outimg2
키 그리기 (img2, kp2, outimg2);
Imshow ("이미지 2 키", outimg2);
추출기
Mat descriptor 1, descriptor2
Brute force matcher & ltl2 & ltfloat & gt> matcher
벡터 & ltDMatch & gt 성냥;
Mat img _ matches
Extractor.compute(img, KP 1, descriptor1);
Extractor.compute(img2, kp2, descriptor2);
Imshow("desc ",descriptor1);
Cout & lt< endl & lt< descriptor1< & ltendl
Matcher.match (설명자 1, 설명자 2, matches);
DrawMatches(img, KP 1, img2, kp2, Matches, img _ matches);
Imshow("matches ",img _ matches);
//이 함수는 키를 기다린 다음 키보드의 아무 키나 눌러 반환합니다.
Waitkey ();
0 을 반환합니다
}