當前位置:編程學習大全網 - 源碼下載 - opencv 中自帶的模板匹配算法出處

opencv 中自帶的模板匹配算法出處

方法如下:

使用OPENCV下SIFT庫做圖像匹配的例程

// opencv_empty_proj.cpp : 定義控制臺應用程序的入口點。

//

#include "stdafx.h"

#include <opencv2/opencv.hpp>

#include <opencv2/features2d/features2d.hpp>

#include<opencv2/nonfree/nonfree.hpp>

#include<opencv2/legacy/legacy.hpp>

#include<vector>

using namespace std;

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])

{

const char* imagename = "img.jpg";

//從文件中讀入圖像

Mat img = imread(imagename);

Mat img2=imread("img2.jpg");

//如果讀入圖像失敗

if(img.empty())

{

fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}

if(img2.empty())

{

fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}

//顯示圖像

imshow("image before", img);

imshow("image2 before",img2);

//sift特征檢測

SiftFeatureDetector siftdtc;

vector<KeyPoint>kp1,kp2;

siftdtc.detect(img,kp1);

Mat outimg1;

drawKeypoints(img,kp1,outimg1);

imshow("image1 keypoints",outimg1);

KeyPoint kp;

vector<KeyPoint>::iterator itvc;

for(itvc=kp1.begin();itvc!=kp1.end();itvc++)

{

cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;

}

siftdtc.detect(img2,kp2);

Mat outimg2;

drawKeypoints(img2,kp2,outimg2);

imshow("image2 keypoints",outimg2);

SiftDescriptorExtractor extractor;

Mat descriptor1,descriptor2;

BruteForceMatcher<L2<float>> matcher;

vector<DMatch> matches;

Mat img_matches;

extractor.compute(img,kp1,descriptor1);

extractor.compute(img2,kp2,descriptor2);

imshow("desc",descriptor1);

cout<<endl<<descriptor1<<endl;

matcher.match(descriptor1,descriptor2,matches);

drawMatches(img,kp1,img2,kp2,matches,img_matches);

imshow("matches",img_matches);

//此函數等待按鍵,按鍵盤任意鍵就返回

waitKey();

return 0;

}

  • 上一篇:影子系統裏有 vmnat.exe vmount2.exe 這兩個進程嗎
  • 下一篇:易語言怎麽可以同時訪問兩個不同的網絡?
  • copyright 2024編程學習大全網