資源簡介
這個是計算機視覺三維重建的領域。該代碼實現特征點提取和立體匹配的功能。三維重建模擬人眼,進行雙目拍攝。這里在經典特征點特區SURF算法基礎上,加入極線約束的思想,去除噪聲和匹配錯誤的雜點。有很好的匹配效果。
代碼片段和文件信息
//?多種特征提取.cpp?:?定義控制臺應用程序的入口點。
//
//#include?“stdafx.h“
#include?
#include?
#include?“opencv2/opencv.hpp“
#include?“opencv2/core/core.hpp“??
#include?“opencv2/features2d/features2d.hpp“??
#include?“opencv2/highgui/highgui.hpp“??
#include??“opencv2/legacy/legacy.hpp“?//?暴力匹配的頭文件
#include??“opencv2/nonfree/nonfree.hpp“
#include???
#include??
//#include?“cv_import_static_lib.h“
using?namespace?std;
using?namespace?cv;
void?main(){
Mat?img1?=?imread(“左1.jpg“?CV_LOAD_IMAGE_GRAYSCALE);
Mat?img2?=?imread(“右1.jpg“?CV_LOAD_IMAGE_GRAYSCALE);
Mat?img_1?img_2;
resize(img1?img_1?Size(img1.cols?/?4?img1.rows?/?4)?0?0?INTER_LINEAR);
resize(img2?img_2?Size(img2.cols?/?4?img2.rows?/?4)?0?0?INTER_LINEAR);
if?(!img_1.data?||?!img_2.data)
{
cout?<“error?reading?images?“?< return;
}
vector?keyPoints_1?keyPoints_2;
Mat?descriptors_1?descriptors_2;
/*-----------------SIFT?featrue?Point----------------
SIFT?sift;
sift(img_1?Mat()?keyPoints_1?descriptors_1);
sift(img_2?Mat()?keyPoints_2?descriptors_2);
*/
/*-----------------SURF?featrue?Point----------------
SURF?surf;
surf(img_1?Mat()?keyPoints_1?descriptors_1);
surf(img_2?Mat()?keyPoints_2?descriptors_2);
//SurfDescriptorExtractor?extrator;???????????//?another?surf?sift?operation
//extrator.compute(img_1?keyPoints_1?descriptors_1);
//extrator.compute(img_2?keyPoints_2?descriptors_2);
*/
//-----------------ORB?featrue?Point----------------
ORB?orb;???//?float?Feature?can?not?use?Flannbase?Match.
orb(img_1?Mat()?keyPoints_1?descriptors_1);
orb(img_2?Mat()?keyPoints_2?descriptors_2);
/*-----------------ORB?featrue?Point----------------
MSER?mesr;
*/
/*-----------------FAST?featrue?Point----------------
FastFeatureDetector?fast1(100);???//?檢測的閾值為40
FastFeatureDetector?fast2(100);
fast1.detect(img_1?keyPoints_1);
fast2.detect(img_2?keyPoints_2);
//SurfDescriptorExtractor?extrator;???????????//?another?surf?sift?operation
//extrator.compute(img_1?keyPoints_1?descriptors_1);
//extrator.compute(img_2?keyPoints_2?descriptors_2);
OrbDescriptorExtractor?extrator;
extrator.compute(img_1?keyPoints_1?descriptors_1);
extrator.compute(img_2?keyPoints_2?descriptors_2);
*/
BruteForceMatcher?matcher;//?orb?等float型的
//FlannbasedMatcher?matcher;???//?只能?對uchar的點進行匹配
vector?matches;
matcher.match(descriptors_1?descriptors_2?matches);
double?max_dist?=?0;?double?min_dist?=?100;
//--?Quick?calculation?of?max?and?min?distances?between?keypoints??
for?(int?i?=?0;?i?riptors_1.rows;?i++)
{
double?dist?=?matches[i].distance;
if?(dist? if?(dist?>?max_dist)?max_dist?=?dist;
}
cout?<“--?Max?dist?:“?< cout?<“--?Min?dist?:“?<
//--?Draw?only?“good“?matches?(i.e.?whose?
- 上一篇:黑客帝國C語言
- 下一篇:ZhajingHua.cpp
評論
共有 條評論