資源簡介
此為一項目工程文件,實現(xiàn)運用opencv進行二維多張全景圖拼接,其中包括運用opencv自帶Stitcher類的例子代碼實現(xiàn)的.cpp文件,還包括兩個運用sift 特征匹配拼接的.cpp文件,其中一個是設置匹配重疊權重,還包括測試幾張圖片,配置環(huán)境opencv2.4.10+VS2010或VS2013。
代碼片段和文件信息
#include?“highgui/highgui.hpp“????
#include?“opencv2/nonfree/nonfree.hpp“????
#include?“opencv2/legacy/legacy.hpp“???
using?namespace?cv;
//計算原始圖像點位在經(jīng)過矩陣變換后在目標圖像上對應位置??
Point2f?getTransformPoint(const?Point2f?originalPoint?const?Mat?&transformMaxtri);
int?main(int?argc?char?*argv[])
{
Mat?image01?=?imread(“img1.jpg“);
Mat?image02?=?imread(“img2.jpg“);
imshow(“拼接圖像1“?image01);
imshow(“拼接圖像2“?image02);
//灰度圖轉換??
Mat?image1?image2;
cvtColor(image01?image1?CV_RGB2GRAY);
cvtColor(image02?image2?CV_RGB2GRAY);
//提取特征點????
SiftFeatureDetector?siftDetector(800);??//?海塞矩陣閾值??
vector?keyPoint1?keyPoint2;
siftDetector.detect(image1?keyPoint1);
siftDetector.detect(image2?keyPoint2);
//特征點描述,為下邊的特征點匹配做準備????
SiftDescriptorExtractor?siftDescriptor;
Mat?imageDesc1?imageDesc2;
siftDescriptor.compute(image1?keyPoint1?imageDesc1);
siftDescriptor.compute(image2?keyPoint2?imageDesc2);
//獲得匹配特征點,并提取最優(yōu)配對?????
FlannbasedMatcher?matcher;
vector?matchePoints;
matcher.match(imageDesc1?imageDesc2?matchePoints?Mat());
sort(matchePoints.begin()?matchePoints.end());?//特征點排序????
//獲取排在前N個的最優(yōu)匹配特征點??
vector?imagePoints1?imagePoints2;
for?(int?i?=?0;?i?10;?i++)
{
imagePoints1.push_back(keyPoint1[matchePoints[i].queryIdx].pt);
imagePoints2.push_back(keyPoint2[matchePoints[i].trainIdx].pt);
}
//獲取圖像1到圖像2的投影映射矩陣,尺寸為3*3??
Mat?homo?=?findHomography(imagePoints1?imagePoints2?CV_RANSAC);
Mat?adjustMat?=?(Mat_(3?3)?<1.0?0?image01.cols?0?1.0?0?0?0?1.0);
Mat?adjustHomo?=?adjustMat*homo;
//獲取最強配對點在原始圖像和矩陣變換后圖像上的對應位置,用于圖像拼接點的定位??
Point2f?originallinkPoint?targetlinkPoint?basedImagePoint;
originallinkPoint?=?keyPoint1[matchePoints[0].queryIdx].pt;
targetlinkPoint?=?getTransformPoint(originallinkPoint?adjustHomo);
basedImagePoint?=?keyPoint2[matchePoints[0].trainIdx].pt;
//圖像配準??
Mat?imageTransform1;
warpPerspective(image01?imageTransform1?adjustMat*homo?Size(image02.cols?+?image01.cols?+?10?image02.rows));
//在最強匹配點的位置處銜接,最強匹配點左側是圖1,右側是圖2,這樣直接替換圖像銜接不好,光線有突變??
Mat?ROIMat?=?image02(Rect(Point(basedImagePoint.x?0)?Point(image02.cols?image02.rows)));
ROIMat.copyTo(Mat(imageTransform1?Rect(targetlinkPoint.x?0?image02.cols?-?basedImagePoint.x?+?1?image02.rows)));
namedWindow(“拼接結果“?0);
imshow(“拼接結果“?imageTransform1);
imwrite(“result1.jpg“?imageTransform1);
waitKey();
return?0;
}
//計算原始圖像點位在經(jīng)過矩陣變換后在目標圖像上對應位置??
Point2f?getTransformPoint(const?Point2f?originalPoint?const?Mat?&transformMaxtri)
{
Mat?originelP?targetP;
originelP?=?(Mat_(3?1)?< targetP?=?transformMaxtri*originelP;
float?x?=?targetP.at(0?0)?/?targetP.at(2?0);
float?y?=?targetP.at(1?0)?/?targetP.at(2?0);
return?Point2f(x?y);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????113664??2018-01-15?11:28??imageStitching\Debug\imageStitching.exe
?????文件?????759616??2018-01-15?11:28??imageStitching\Debug\imageStitching.ilk
?????文件????2248704??2018-01-15?11:28??imageStitching\Debug\imageStitching.pdb
?????文件?????507274??2012-05-21?16:54??imageStitching\Debug\img1.jpg
?????文件?????500875??2012-05-21?16:54??imageStitching\Debug\img2.jpg
?????文件?????497205??2012-05-21?16:54??imageStitching\Debug\img3.jpg
?????文件????2467340??2018-01-15?11:36??imageStitching\Debug\result.jpg
?????文件?????317368??2012-04-25?04:25??imageStitching\Debug\tbb_debug.dll
?????文件???????4508??2016-10-23?20:58??imageStitching\imageStitching\Debug\BuildLog.htm
?????文件???????1074??2018-01-15?11:12??imageStitching\imageStitching\Debug\imageStitching.Build.CppClean.log
?????文件?????????45??2016-11-08?10:58??imageStitching\imageStitching\Debug\imageStitching.lastbuildstate
?????文件???????7554??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.log
?????文件???????1390??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\cl.command.1.tlog
?????文件??????38284??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\CL.read.1.tlog
?????文件????????766??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\CL.write.1.tlog
?????文件????????161??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\imageStitching.lastbuildstate
?????文件??????13280??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\li
?????文件??????35242??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\li
?????文件????????408??2018-01-15?11:28??imageStitching\imageStitching\Debug\imageStitching.tlog\li
?????文件??????????0??2016-11-08?10:58??imageStitching\imageStitching\Debug\imageStitching.unsuccessfulbuild
?????文件?????????67??2012-05-21?16:58??imageStitching\imageStitching\Debug\mt.dep
?????文件????2457971??2012-05-21?17:10??imageStitching\imageStitching\Debug\result.jpg
?????文件?????445806??2018-01-15?11:28??imageStitching\imageStitching\Debug\stitching.obj
?????文件?????560128??2018-01-15?11:28??imageStitching\imageStitching\Debug\vc120.idb
?????文件????1265664??2018-01-15?11:28??imageStitching\imageStitching\Debug\vc120.pdb
?????文件???????3757??2012-05-21?16:58??imageStitching\imageStitching\imageStitching.vcproj
?????文件???????1421??2016-10-23?20:58??imageStitching\imageStitching\imageStitching.vcproj.GuoDafeng-PC.Guo?Dafeng.user
?????文件???????1441??2012-05-22?16:58??imageStitching\imageStitching\imageStitching.vcproj.HP98402794308.Administrator.user
?????文件???????4962??2018-01-15?11:16??imageStitching\imageStitching\imageStitching.vcxproj
?????文件????????934??2018-01-15?11:16??imageStitching\imageStitching\imageStitching.vcxproj.filters
............此處省略53個文件信息
- 上一篇:C++程序設計語言 揣錦華
- 下一篇:基于MFC圖片去霧增強程序
評論
共有 條評論