基于SURF算法的图像拼接
基于SURF算法的图像拼接处理,运用RANSAC算法,单向性等原理进行图像拼接。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-03-19 21:44 Project17
目录 0 2015-03-15 12:29 Project17Debug
文件 179712 2015-03-19 21:39 Project17DebugProject17.exe
文件 737700 2015-03-19 21:39 Project17DebugProject17.ilk
文件 2739200 2015-03-19 21:39 Project17DebugProject17.pdb
目录 0 2015-03-19 21:39 Project17Project17
文件 17498112 2015-03-19 21:44 Project17Project17.sdf
文件 894 2015-01-23 11:00 Project17Project17.sln
文件 22016 2015-03-19 21:44 Project17Project17.v11.suo
文件 1261106 2015-03-08 12:36 Project17Project171.jpg
文件 1272244 2015-03-08 12:36 Project17Project172.jpg
文件 1300181 2015-03-08 12:36 Project17Project173.jpg
文件 1284305 2015-03-08 12:36 Project17Project174.jpg
文件 1313911 2015-03-08 12:36 Project17Project175.jpg
文件 1305019 2015-03-08 12:36 Project17Project176.jpg
目录 0 2015-03-19 21:39 Project17Project17Debug
文件 560 2015-03-19 21:39 Project17Project17Debugcl.command.1.tlog
文件 22222 2015-03-19 21:39 Project17Project17DebugCL.read.1.tlog
文件 402 2015-03-19 21:39 Project17Project17DebugCL.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink-cvtres.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink-cvtres.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink-rc.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink-rc.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096-cvtres.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096-cvtres.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096-rc.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096-rc.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10096.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10160-cvtres.read.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debuglink.10160-cvtres.write.1.tlog
............此处省略109个文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main()
{
//读入图像并进行灰度处理
Mat srcImage1 = imread(“1.jpg“0);
Mat srcImage2 = imread(“2.jpg“0);
//cout<<“img1矩阵大小:“< //cout<<“img2矩阵大小:“< Mat tmpImage1img1;
Mat tmpImage2img2;
//对原图像进行两次缩放处理
pyrDown(srcImage1tmpImage1Size(srcImage1.cols/2srcImage1.rows/2));
pyrDown(tmpImage1img1Size(tmpImage1.cols/2tmpImage1.rows/2));
pyrDown(srcImage2tmpImage2Size(srcImage2.cols/2srcImage2.rows/2));
pyrDown(tmpImage2img2Size(tmpImage2.cols/2tmpImage2.rows/2));
imshow(“Src1“img1);
imshow(“Src2“img2);
//imwrite(“12.jpg“img1);
//imwrite(“13.jpg“img2);
//第一步,用SURF算子检测关键点;
int minHessian=400;
SurfFeatureDetector detector(minHessian);
std::vector m_LeftKeym_RightKey;//构造2个专门由点组成的点向量用来存储特征点
detector.detect(img1m_LeftKey);//将img1图像中检测到的特征点存储起来放在m_LeftKey中
detector.detect(img2m_RightKey);//同理
cout<<“图像1特征点的个数:“< cout<<“图像2特征点的个数:“< //计算特征向量
SurfDescriptorExtractor extractor;//定义描述子对象
cv::Mat descriptors1 descriptors2;//存放特征向量的矩阵
extractor.compute(img1m_LeftKeydescriptors1);
extractor.compute(img2m_RightKeydescriptors2);
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); //cvScalar(25500)画的圈圈是蓝色,对应于特征点的颜色DrawMatchesFlags::DRAW_RICH_KEYPOINTS表示关键点上圆圈的尺寸与特征的尺度成正比,对应于0,是“标志位”的意思
drawKeypoints(img2m_RightKeyimg_m_RightKeyScalar::all(-1)0);
imshow(“Keysrc1“img_m_LeftKey);
imshow(“Keysrc2“img_m_RightKey);
imwrite(“图像1的特征点.jpg“img_m_LeftKey);
imwrite(“图像2的特征点.jpg“img_m_RightKey);
//匹配两幅图像的描述子
//用burte force进行匹配特征向量
BruteForceMatcher>matcher;//定义一个burte force matcher对象
vector matches;//定义数据类型为matches的vector容器
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(matche
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-03-19 21:44 Project17
目录 0 2015-03-15 12:29 Project17Debug
文件 179712 2015-03-19 21:39 Project17DebugProject17.exe
文件 737700 2015-03-19 21:39 Project17DebugProject17.ilk
文件 2739200 2015-03-19 21:39 Project17DebugProject17.pdb
目录 0 2015-03-19 21:39 Project17Project17
文件 17498112 2015-03-19 21:44 Project17Project17.sdf
文件 894 2015-01-23 11:00 Project17Project17.sln
文件 22016 2015-03-19 21:44 Project17Project17.v11.suo
文件 1261106 2015-03-08 12:36 Project17Project171.jpg
文件 1272244 2015-03-08 12:36 Project17Project172.jpg
文件 1300181 2015-03-08 12:36 Project17Project173.jpg
文件 1284305 2015-03-08 12:36 Project17Project174.jpg
文件 1313911 2015-03-08 12:36 Project17Project175.jpg
文件 1305019 2015-03-08 12:36 Project17Project176.jpg
目录 0 2015-03-19 21:39 Project17Project17Debug
文件 560 2015-03-19 21:39 Project17Project17Debugcl.command.1.tlog
文件 22222 2015-03-19 21:39 Project17Project17DebugCL.read.1.tlog
文件 402 2015-03-19 21:39 Project17Project17DebugCL.write.1.tlog
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
文件 2 2015-03-19 21:39 Project17Project17Debugli
............此处省略109个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)