资源简介
此为一项目工程文件,实现运用opencv进行二维多张全景图拼接,其中包括运用opencv自带Stitcher类的例子代码实现的.cpp文件,还包括两个运用sift 特征匹配拼接的.cpp文件,其中一个是设置匹配重叠权重,还包括测试几张图片,配置环境opencv2.4.10+VS2010或VS2013。
代码片段和文件信息
#include “highgui/highgui.hpp“
#include “opencv2/nonfree/nonfree.hpp“
#include “opencv2/legacy/legacy.hpp“
using namespace cv;
//计算原始图像点位在经过矩阵变换后在目标图像上对应位置
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);
//获得匹配特征点,并提取最优配对
FlannbasedMatcher matcher;
vector matchePoints;
matcher.match(imageDesc1 imageDesc2 matchePoints Mat());
sort(matchePoints.begin() matchePoints.end()); //特征点排序
//获取排在前N个的最优匹配特征点
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;
}
//计算原始图像点位在经过矩阵变换后在目标图像上对应位置
Point2f getTransformPoint(const Point2f originalPoint const Mat &transformMaxtri)
{
Mat originelP targetP;
originelP = (Mat_(3 1) << originalPoint.x originalPoint.y 1.0);
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图片去雾增强程序
相关资源
- 基于opencv和MFC的多功能视频、图像处
- opencv-3.4.6.zip
- opencv+MFC实现图像拼接
- 车牌识别的mfc加opencv
- VS2015MFC+Opencv2 打开图片及简单的图像
- 车牌识别系统源代码
- Learning OpenCV 3 Computer vision in C++ 无水印
- C++车道线检测例程,环境为VS2015以上
- LSD线特征提取方法+Opencv实现C++
- mfc+opencv读取摄像头视频并实现抓图
- 基于SVM与人工神经网络的车牌识别O
- c++ 用opencv比较两张人脸照片是否相似
- MATLAB单双目标定程序(Opencv C++)
- 基于OpenCV的人脸验证和人脸识别MFC程
- C++ 解析rtsp流后返回Iplimage,用Opengl显
- MFC通过OpenCV 显示到Picture control
- 计算路口通过车辆的 OPENCV C++
- opencv结合MFC显示带滚动条的大图片
- 人脸特征点检测瞳孔、眼角、鼻子、
- 基于SVM与人工神经网络的车牌识别C
- OpenCV MFC 图像处理 软件源码
- OpenCV+MFC制作视频播放器
- opencv c++相机标定程序 包含标定图像和
- c++语言opencv加socket实现远程桌面监控
- VS2012 + Opencv2.4.9实现单张人脸检测及人
- 基于opencv的图像检索算法
- 适用于vc6++的openCV1.0
- OpenCV MFC实现图像处理大集合
- OpenCV1.0版本
- vibe运动目标提取opencv C++源代码
评论
共有 条评论