Opencv 使用Stitcher类图像拼接生成全景图像
Opencv中自带的Stitcher类可以实现全景图像,效果不错。下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到:
\opencv\sources\samples\cpp\stitching.cpp
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching/stitcher.hpp"
#include <iostream>
using namespace cv;
using namespace std;
vector<Mat> imgs; //保存拼接的原始图像向量
//导入所有原始拼接图像函数
void parseCmdArgs(int argc, char** argv);
int main(int argc, char* argv[])
{
//导入拼接图像
parseCmdArgs(argc, argv);
Mat pano;
Stitcher stitcher = Stitcher::createDefault(false);
Stitcher::Status status = stitcher.stitch(imgs, pano);//拼接
if (status != Stitcher::OK) //判断拼接是否成功
{
cout << "Can't stitch images, error code = " << int(status) << endl;
return -1;
}
namedWindow("全景拼接",0);
imshow("全景拼接",pano);
imwrite("D:\\全景拼接.jpg",pano);
waitKey();
return 0;
}
//导入所有原始拼接图像函数
void parseCmdArgs(int argc, char** argv)
{
for(int i=1;i<argc;i++)
{
Mat img = imread(argv[i]);
if (img.empty())
{
cout << "Can't read image '" << argv[i] << "'\n";
}
imgs.push_back(img);
}
}
图1:
图2:
图3:
图4:
图5:
5个图片的拍摄角度合起来在180°左右,没有经过压缩的,下载下来可以直接测试使用,传入顺序随意,Stitcher会自动排列。全景拼接效果很赞:
Opencv 使用Stitcher类图像拼接生成全景图像的更多相关文章
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...
- python+opencv中最近出现的一些变化( OpenCV 官方的 Python tutorial目前好像还没有改过来?) 记一次全景图像的拼接
最近在学习过程中发现opencv有了很多变动, OpenCV 官方的 Python tutorial目前好像还没有改过来,导致大家在学习上面都出现了一些问题,现在做一个小小的罗列,希望对大家有用 做的 ...
- 昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!
摘要:近日,CVPR 2022放榜,基于CANN的AI论文<Interactive Image Synthesis with Panoptic Layout Generation>强势上榜 ...
- 关于Opencv2.4.x中stitcher类的简单应用
1.opencv2.4以上版本有stitcher类,可以简单方便的实现图像的拼接,目前只是简单的测试一下stitcher类的拼接功能,也是纠结了好长时间,最终发现是要在链接库中加上opencv_sti ...
- opencv中mat类介绍
The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It ...
- Python下opencv使用笔记(七)(图像梯度与边缘检測)
梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(无论是横向的.纵向的.斜方向的等等),所须要的无非也是一个核模板.模板的不同结果也不同.所以能够看到,全部的这些个算子函数,归结究竟都能够用 ...
- [置顶] 实现360度全景图像的利器--PanoramaGL
传送门 ☞轮子的专栏 ☞转载请注明 ☞ http://blog.csdn.net/leverage_1229 介绍 本指南将介绍一个PanoramaGL 0.1类库的简单用法,更多的细节请签出 Hel ...
- opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...
- Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)
前面以前介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这个方案直接对图像空间操作,操作简单.所以也是空间域滤波. 频域滤波说究竟终于可能是和空间域滤波实现相同的功 ...
随机推荐
- android图片文件的路径地址与Uri的相互转换
一个android文件的Uri地址一般如下: content://media/external/images/media/62026 这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中 ...
- Altium Designer中距离的测量
Ctrl+M 清除测量标签:点击右下角的清除按键
- 《你不知道的JavaScript(上)》笔记——提升
笔记摘自:<你不知道的JavaScript(上)>第3章 提升 1.包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理. 2.变量和函数声明从它们在代码中出现的位置被“移动”到了 ...
- netty epoll调用示例
1.服务器端 import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.PooledByteBufAllocator; imp ...
- C#添加水印
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- 一些mysql innodb的建议
http://blog.csdn.net/yunhua_lee/article/details/8239145 原文:http://dev.mysql.com/doc/refman/5.5/en/in ...
- SIMPLE QUERY几个原则
1.减少查询对象的数据页(db block)数量. 尽量避免使用 * 用准确的列明减少不必要的一些资源浪费. 2.查看是否使用了index. 索引是SQL性能调优的重要手段,下面几个是有索引不能使 ...
- ZOJ 1101 Gamblers 二分
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101 让你在一堆互不相同的数中查找是否有a=b+c+d,若有不同的解,则输出最大 ...
- 一起学libcef--给你的浏览器删除cookie
long long ago, 我们讨论了如给你cef设置cookie. 如今来补充一点,假设给你的浏览器删除某一cookie. review一下设置cookie: std::wstring usern ...
- js进阶 12-4 jquery键盘事件如何使用
js进阶 12-4 jquery键盘事件如何使用 一.总结 一句话总结:键盘和鼠标都是外设输入设备,所以函数很像,所以使用就像鼠标事件click一样 1.jquery键盘事件有哪三个? 1(up和do ...