示例程序047--用opencv的stitcher类实现图像拼接
2015-06-04 10:13
741 查看
原文:http://blog.sina.com.cn/s/blog_a98e39a201016sn7.html
opencv2.4.0以上的版本提供了stitcher类,可以很方便的实现几幅图像的拼接,关于这个类详细的介绍,可以参考文档: http://docs.opencv.org/2.4.2/modules/stitching/doc/high_level.html?highlight=stitcher#stitcher。
该类主要用的成员函数有createDefault,用于创建缺省参数的stitcher;estimatedTransform,用于匹配图像、分析摄像头旋转角度;composePanorama,生成最后的拼接图像。文档中提示如果对stitching的整过过程不熟悉的话,最好不要使用以上两个函数,直接使用stitch就行了。关于图像拼接的过程,涉及到特征点的提取、特征点匹配、图像融合等等比较复杂的过程,可以参考相关论文和期刊。
在安装文件下,提供了图像拼接的例子:C:\opencv2.4.2\opencv\samples\cpp\stitching.cpp
配置好后直接运行就可以了:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching/stitcher.hpp"
using namespace std;
using namespace cv;
bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = "result.jpg";
//void printUsage();
//int parseCmdArgs(int argc, char** argv);
int main(int argc, char* argv[])
{
Mat img=imread("1.jpg");
imgs.push_back(img);
img=imread("2.jpg");
imgs.push_back(img);
img=imread("3.jpg");
imgs.push_back(img);
Mat pano;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, pano);
if (status != Stitcher::OK)
{
cout << "Can't stitch images, error code = " << int(status) << endl;
return -1;
}
imwrite(result_name, pano);
return 0;
}
最终结果:
opencv2.4.0以上的版本提供了stitcher类,可以很方便的实现几幅图像的拼接,关于这个类详细的介绍,可以参考文档: http://docs.opencv.org/2.4.2/modules/stitching/doc/high_level.html?highlight=stitcher#stitcher。
该类主要用的成员函数有createDefault,用于创建缺省参数的stitcher;estimatedTransform,用于匹配图像、分析摄像头旋转角度;composePanorama,生成最后的拼接图像。文档中提示如果对stitching的整过过程不熟悉的话,最好不要使用以上两个函数,直接使用stitch就行了。关于图像拼接的过程,涉及到特征点的提取、特征点匹配、图像融合等等比较复杂的过程,可以参考相关论文和期刊。
在安装文件下,提供了图像拼接的例子:C:\opencv2.4.2\opencv\samples\cpp\stitching.cpp
配置好后直接运行就可以了:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching/stitcher.hpp"
using namespace std;
using namespace cv;
bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = "result.jpg";
//void printUsage();
//int parseCmdArgs(int argc, char** argv);
int main(int argc, char* argv[])
{
Mat img=imread("1.jpg");
imgs.push_back(img);
img=imread("2.jpg");
imgs.push_back(img);
img=imread("3.jpg");
imgs.push_back(img);
Mat pano;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, pano);
if (status != Stitcher::OK)
{
cout << "Can't stitch images, error code = " << int(status) << endl;
return -1;
}
imwrite(result_name, pano);
return 0;
}
最终结果:
相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- OpenCV 2.4.3 C++ 平滑处理分析
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- 在树莓派2或树莓派B+上安装Python和OpenCV的教程
- OpenCV配置,从来没有这么简单!
- ubuntu下opencv和qt的安装配置
- OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008
- 分享一些OpenCV实现立体视觉的经验
- 关于OpenCv图像变换与基本图形检测
- "应用程序正常初始化失败"-0xc0150002 解决办法
- OpenCV->HSV色彩空间
- opencv 内存泄露
- OpenCV函数cvFindContours
- OpenCV 2.3.1图像文件的读入和显示
- opencv2 矩阵方式 resize图像缩放代码
- OpenCV 灰度直方图
- 彩色图转为灰度图
- Qt + opencv +mac