资源简介
VS2012 x64+opencv做的图像拼接,参照了别人的代码改编。
做的是左右拼接,上下的行不行没试过。
主要函数就是图像的储存位置,需要在代码里改下
测试了下还是比较稳健的,拼接效果尚可,不过重叠部分可能产生鬼影,另外接缝处有小裂缝,如果不满意,可再设计方法优化
所有代码均含注释,浅显易懂,含测试图片
运行时请自行配置好头文件和lib文件目录
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main()
{
initModule_nonfree();//初始化模块,使用SIFT或SURF时用到
Ptr detector = FeatureDetector::create( “SURF“ );//创建SIFT特征检测器,可改成SURF/ORB
PtrriptorExtractor> descriptor_extractor = DescriptorExtractor::create( “SURF“ );//创建特征向量生成器,可改成SURF/ORB
PtrriptorMatcher> descriptor_matcher = DescriptorMatcher::create( “BruteForce“ );//创建特征匹配器
if( detector.empty() || descriptor_extractor.empty() )
cout<<“fail to create detector!“;
//读入图像
Mat img1 = imread(“E://1.jpg“);
Mat img2 = imread(“E://2.jpg“);
//特征点检测
double t = getTickCount();//当前滴答数
vector m_LeftKeym_RightKey;
detector->detect( img1 m_LeftKey );//检测img1中的SIFT特征点,存储到m_LeftKey中
detector->detect( img2 m_RightKey );
cout<<“图像1特征点个数:“< cout<<“图像2特征点个数:“<
//根据特征点计算特征描述子矩阵,即特征向量矩阵
Mat descriptors1descriptors2;
descriptor_extractor->compute( img1 m_LeftKey descriptors1 );
descriptor_extractor->compute( img2 m_RightKey descriptors2 );
t = ((double)getTickCount() - t)/getTickFrequency();
cout<<“SIFT算法用时:“<
cout<<“图像1特征描述矩阵大小:“<riptors1.size()
<<“,特征向量个数:“<riptors1.rows<<“,维数:“<riptors1.cols< cout<<“图像2特征描述矩阵大小:“<riptors2.size()
<<“,特征向量个数:“<riptors2.rows<<“,维数:“<riptors2.cols<
//画出特征点
Mat img_m_LeftKeyimg_m_RightKey;
drawKeypoints(img1m_LeftKeyimg_m_LeftKeyScalar::all(-1)0);
drawKeypoints(img2m_RightKeyimg_m_RightKeyScalar::all(-1)0);
//imshow(“Src1“img_m_LeftKey);
//imshow(“Src2“img_m_RightKey);
//特征匹配
vector matches;//匹配结果
descriptor_matcher->match( descriptors1 descriptors2 matches );//匹配两个图像的特征矩阵
cout<<“Match个数:“<
//计算匹配结果中距离的最大和最小值
//距离是指两个特征向量间的欧式距离,表明两个特征的差异,值越小表明两个特征点越接近
double max_dist = 0;
double min_dist = 100;
for(int i=0; i {
double dist = matches[i].distance;
if(dist < min_dist) min_dist = dist;
if(dist > max_dist) max_dist = dist;
}
cout<<“最大距离:“< cout<<“最小距离:“<
//筛选出较好的匹配点
vector goodMatches;
for(int i=0; i {
if(matches[i].distance < 0.2 * max_dist)
{
goodMatches.push_back(matches[i]);
}
}
cout<<“goodMatch个数:“<
//画出匹配结果
Mat img_matches;
//红色连接的是匹配的特征点对,绿色是未匹配的特征点
drawMatches(img1m_LeftKeyimg2m_RightKeygoodMatchesimg_matches
Scalar::all(-1)/*CV_RGB(25500)*/CV_RGB(02550)Mat()2);
imshow(“MatchSIFT“img_matches);
IplImage result=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-09 21:15 SIFT_RANSAC\
目录 0 2014-04-09 13:52 SIFT_RANSAC\Debug\
文件 2591744 2014-04-09 13:51 SIFT_RANSAC\Debug\SIFT_RANSAC.pdb
目录 0 2014-04-09 12:47 SIFT_RANSAC\Release\
文件 38400 2014-04-09 12:47 SIFT_RANSAC\Release\SIFT_RANSAC.exe
文件 1428480 2014-04-09 12:47 SIFT_RANSAC\Release\SIFT_RANSAC.pdb
目录 0 2014-04-09 13:56 SIFT_RANSAC\SIFT_RANSAC\
文件 15925248 2014-04-09 21:15 SIFT_RANSAC\SIFT_RANSAC.sdf
文件 1254 2014-04-01 20:39 SIFT_RANSAC\SIFT_RANSAC.sln
文件 23552 2014-04-09 21:15 SIFT_RANSAC\SIFT_RANSAC.v11.suo
目录 0 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\
文件 632 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\cl.command.1.tlog
文件 24170 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\CL.read.1.tlog
文件 360 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\CL.write.1.tlog
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 2 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\li
文件 68 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\SIFT_RANSAC.lastbuildstate
文件 1381 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\SIFT_RANSAC.log
文件 0 2014-04-09 13:52 SIFT_RANSAC\SIFT_RANSAC\Debug\SIFT_RANSAC.unsuccessfulbuild
文件 789504 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\vc110.idb
文件 1699840 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\vc110.pdb
文件 756038 2014-04-09 13:33 SIFT_RANSAC\SIFT_RANSAC\Debug\源.obj
目录 0 2014-04-09 12:47 SIFT_RANSAC\SIFT_RANSAC\Release\
文件 652 2014-04-09 11:48 SIFT_RANSAC\SIFT_RANSAC\Release\cl.command.1.tlog
文件 24014 2014-04-09 11:48 SIFT_RANSAC\SIFT_RANSAC\Release\CL.read.1.tlog
文件 368 2014-04-09 11:48 SIFT_RANSAC\SIFT_RANSAC\Release\CL.write.1.tlog
............此处省略210个文件信息
- 上一篇:运筹学(第三版)答案
- 下一篇:exe+dll+加壳+工具.NET
相关资源
- ippicv_2017u3_lnx_intel64_general_20180518.tgz
- LearningOpenCV中文版-于仕琪书源码.zip
- qtOpenCVTools v1.7.0.rar
- mingw64编译好的OpenCV3.4.10
- OpenCV 4.2.0 && Qt5.14.1 编译好的库
-
OpenCV的haarcascades 各种分类器xm
l文件 - OpenCV计算机视觉编程攻略 第三版
- opencv-4.1.0样例图片和视频.zip
- OpenCv3.3 32位版本
- OpenCV 的opencv_createsamples.exe和opencv_ha
- Kinect + openni+opencv 获取深度图
- opencv-3.4.1-windows版本
- opencv 2计算机视觉编程手册_中文_+图片
- opencv-3.4.7.zip
- 深入理解OpenCV 实用计算机视觉项目解
- vgg_generated_120.i等.tar.gz
- opencv4.5.0-cmake错误解决
- OpenCV 3.1 离线文档(包括contrib部分)
- QT实现的Opencv图像处理、点云显示、演
- 《opencv3编程入门》 毛星云完整版--
- 自定义图像识别
- opencv2.4.1-源码
- OpenCV-2.4.1_build&tbb;_vs_(x64)05/08/10三种
- OpenCvSharp 读摄像头及图像拼接功能
- opencv 3.1.0 3rdparty\\ffmpeg\\download
- 《OpenCV图像处理编程》完整版(高清
- opencv相关的书籍
- 鱼眼摄像头标定与畸变校正双OPENCV版
- 用openCV实现图片的放大缩小、图片旋
- opencv-2.4.6源码
评论
共有 条评论