資源簡介
兩個文件夾,一個為sift+ransac圖像匹配代碼,同時還有匹配精度檢測代碼(以像素精度)。另一個文件夾為surf圖像匹配代碼。

代碼片段和文件信息
#include
#include
#include
#include
#include
#include
using?namespace?std;
using?namespace?cv;
using?namespace?cv::xfeatures2d;
Point2f?getTransformPoint(const?Point2f?originalPoint?const?Mat?&transformMaxtri);
int?main()
{
//Mat?srcImage1?=?imread(“D:\\opencv\\pictures\\SIFT_try\\1.png“);
Mat?srcImage1?=?imread(“D:\\研一文件夾\\上學(xué)期\\迷之課設(shè)\\課程設(shè)計(jì)\\demo-data\\im44.jpg“);
//Mat?srcImage1?=?imread(“D:\\研一文件夾\\上學(xué)期\\迷之課設(shè)\\課程設(shè)計(jì)\\demo-data\\building01.png“);
//Mat?srcImage1?=?imread(“D:\\opencv\\pictures\\視頻采集\\35.jpg“);
//Mat?srcImage1?=?imread(“D:\\opencv\\pictures\\視頻采集\\headPose_1.jpg“);
//Mat?srcImage1?=?imread(“D:\\opencv\\pictures\\eye_close.jpg“);
//Mat?srcImage2?=?imread(“D:\\opencv\\pictures\\視頻采集\\headPose_2.jpg“);
//Mat?srcImage2=?imread(“D:\\opencv\\pictures\\視頻采集\\79.jpg“);
//Mat?srcImage2?=?imread(“D:\\opencv\\pictures\\SIFT_try\\2.png“);
Mat?srcImage2?=?imread(“D:\\研一文件夾\\上學(xué)期\\迷之課設(shè)\\課程設(shè)計(jì)\\demo-data\\im54.jpg“);
//Mat?srcImage2?=?imread(“D:\\研一文件夾\\上學(xué)期\\迷之課設(shè)\\課程設(shè)計(jì)\\demo-data\\building02.png“);
if?(!srcImage1.data?||?!srcImage2.data)
{
cout?<“讀取圖片出錯“?< return?false;
}
imshow(“原始圖1“?srcImage1);
imshow(“原始圖2“?srcImage2);
////原?
//int?minHessian?=?100;
////改
int?minHessian?=?700;
Ptr?detector?=?SurfFeatureDetector::create(minHessian);
vector?key_points_1?key_points_2;
Mat?dstImage1?dstImage2;
detector->detectAndCompute(srcImage1?Mat()?key_points_1?dstImage1);
detector->detectAndCompute(srcImage2?Mat()?key_points_2?dstImage2);//可以分成detect和compute
Mat?img_keypoints_1?img_keypoints_2;
drawKeypoints(srcImage1?key_points_1?img_keypoints_1?Scalar::all(-1)?DrawMatchesFlags::DEFAULT);
drawKeypoints(srcImage2?key_points_2?img_keypoints_2?Scalar::all(-1)?DrawMatchesFlags::DEFAULT);
PtrriptorMatcher>?matcher?=?DescriptorMatcher::create(“Flannbased“);
vectormach;
matcher->match(dstImage1?dstImage2?mach);
double?Max_dist?=?0;
double?Min_dist?=?100;
for?(int?i?=?0;?i? {
double?dist?=?mach[i].distance;
if?(dist? if?(dist?>?Max_dist)Max_dist?=?dist;
}
cout?<“最短距離“?< cout?<“最長距離“?<
vectorgoodmaches;
for?(int?i?=?0;?i? {
if?(mach[i].distance?2?*?Min_dist)
goodmaches.push_back(mach[i]);
}
////改開始
cout?<“matches?size:???“?< cout?<“good?matches?size:??“?< vector??RAN_KP1?RAN_KP2;
for?(size_t?i?=?0;?i?
{
RAN_KP1.push_back(key_points_1[goodmaches[i].queryIdx]);
RAN_KP2.push_back(key_points_2[goodmaches[i].trainIdx]);
//RAN_KP1是要存儲img01中能與img02匹配的點(diǎn)
//goodM
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5113??2019-01-09?15:34??sift+surf匹配代碼\SIFT_RANSAC\main.cpp
?????文件???????2603??2018-11-07?22:58??sift+surf匹配代碼\SIFT_RANSAC\timer.cpp
?????文件??????12404??2019-01-09?21:54??sift+surf匹配代碼\SURF\main.cpp
?????目錄??????????0??2019-03-24?13:07??sift+surf匹配代碼\SIFT_RANSAC
?????目錄??????????0??2019-03-24?13:07??sift+surf匹配代碼\SURF
?????目錄??????????0??2019-03-24?13:07??sift+surf匹配代碼
-----------?---------??----------?-----??----
????????????????20120????????????????????6
評論
共有 條評論