本文主要是介绍opencv-Feature Description特征描述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接下来的opencv学习,主要使用VS2012+opencv2.4.5+WIN8来完成,相关例程的学习!
/*** @file SURF_descriptor* @brief SURF detector + descritpor + BruteForce Matcher + drawing matches with OpenCV functions* @author A. Huaman*/#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/legacy/legacy.hpp"using namespace cv;void readme();/*** @function main* @brief Main function*/
int main( int argc, char** argv )
{if( argc != 3 ){ return -1; }Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );if( !img_1.data || !img_2.data ){ return -1; }//-- Step 1: Detect the keypoints using SURF Detectorint minHessian = 400;SurfFeatureDetector detector( minHessian );std::vector<KeyPoint> keypoints_1, keypoints_2;detector.detect( img_1, keypoints_1 );detector.detect( img_2, keypoints_2 );//-- Step 2: Calculate descriptors (feature vectors)SurfDescriptorExtractor extractor;Mat descriptors_1, descriptors_2;extractor.compute( img_1, keypoints_1, descriptors_1 );extractor.compute( img_2, keypoints_2, descriptors_2 );//-- Step 3: Matching descriptor vectors with a brute force matcherBruteForceMatcher< L2<float> > matcher;std::vector< DMatch > matches;matcher.match( descriptors_1, descriptors_2, matches );//-- Draw matchesMat img_matches;drawMatches( img_1, keypoints_1, img_2, keypoints_2, matches, img_matches );//-- Show detected matchesimshow("Matches", img_matches );waitKey(0);return 0;
}/*** @function readme*/
void readme()
{ std::cout << " Usage: ./SURF_descriptor <img1> <img2>" << std::endl; }
这篇关于opencv-Feature Description特征描述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!