opencv拼接相关1

这里面都是一些比较杂的东西,没什么实际意义。主要是为了,后面能跑一个程序:

Stitcher:

抠细节:

http://docs.opencv.org/2.4.2/modules/stitching/doc/high_level.html?highlight=stitcher#stitcher

Stitcher是啥?

class Stitcher

High level image stitcher. It’s possible to use this class without being aware of the entire stitching pipeline. However, to be able to achieve higher stitching stability and quality of the final images at least being familiar with the theory is recommended (see Stitching Pipeline).

拼接类:

高级图像拼接类。在不了解完整拼接流程的情况下使用该类是可行的。然而,为了能够得到更高的拼接稳定性和质量关于最终生成的图像,至少还是应该熟悉一下(拼接流程)这个理论。

然后是源码啦~这个参考这篇文章以及opencv的源码比较好。

类一:

函数一:

Stitcher类的createDefault函数。

创建一个无参拼接类对象。

C++: Stitcher Stitcher::createDefault(bool try_use_gpu=false)

参数:尝试使用gpu。我想他的结果跟register和inline一样,能用最好,不能用,就将就。

返回:拼接类的实例对象。

函数二:

Stitcher类的estimateTransform函数。

该函数尝试通过给出的图像来估算每张照片由相机带来的旋转。

注记:

如果熟悉拼接流程的话,可以使用这个函数,如果不熟悉的话,还是用Stitcher::stitch()吧。

C++:Status Stitcher::estimateTransform(InputArray images)

这个Status是一个返回值,查找后发现他是一个枚举类型。在stitcher.hpp下。

enum Status { OK, ERR_NEED_MORE_IMGS };//可以,错误_需要_更多_图片。两个可供选择的值。

参数:images-输入的图片

rois-兴趣矩形区域

返回值:状态代码

函数三:

Stitcher类的composePanorama函数。//合成全景图

这个函数是在 图像预估变换还未进行的假设下 尝试把所有给出的图像(或者存储在其他函数调用内部的图片)拼接到最终的全景图中。

注记:

最好使用Stitcher::stitch() 函数除非你知晓拼接流程。

参数:iamges-输入图片

pano-最终全景图

返回:状态码

关于这个InputArray和 OutputArray

f:\opencv249\opencv\build\include\opencv2\core\core.hpp

在core.hpp 里面这样描述的:

typedef const _InputArray& InputArray;

typedef const _OutputArray& OutputArray;

面这然后在核心库里面有更多的对于输入输出的这个数组的描述。

现在先把大体顺下去。

函数四:

Stitcher的stitch函数

这个函数是用来尝试拼接给出的图片。

参数:iamges-输入图片

rois- 兴趣矩形区域

pano-最终全景图

返回:状态码

类二:

Warper:翻译过来是这个东西:整经机、整经工。

Warp:经纱,弯曲,使弯曲。

整经机:整经机用于整经。

整经:将一定根数的经纱按规定的长度和宽度平行卷绕在经轴或织轴上的工艺过程。经过整经的经纱供浆纱和穿经之用。

经纱:

名词:沿织机长度方向延伸的一串纱,由此纱纺成织物沿长度方向的线,常常捻得比填纱紧。

动词:织布之前,把纺好的纱或线密密地绷起来,来回梳整,使成为经纱或经线。

我觉得太多就没有必要了,还是从整经这个概念上走,如果把画比作经纱就好理解了。照片是凌乱的,每一部分都不挨着,所以需要规律化,那么这个规律化得有一个东西来完成,作者起了一个名字叫做整经机。从这个意义上理解,可能是通的。

先继续往下看,【不小心在百度的时候看到了这个:

http://baike.baidu.com/link?url=KzoBMNgHVChM-fgu_4aG8gsh8EgDmwDg9Fe94a-fiwkKIyizkEqUkXjfzbw6Bd15xT0VZuakTgAcpJaPJfQeR_

再结合轴经、分条、分段、球经,以及planewarper、cylindricalwarper、sphericalwarper标题我觉得就是这个东西了。

这样三种类型的整经机都继承了整经机创造者。//整经机用来规律化我们的输入的图片。

1、所以当下为了实现拼接,我们需要完善几个事儿,整经机的实现类

http://docs.opencv.org/2.4.2/modules/stitching/doc/warpers.html#detail::PlaneWarper : public detail::RotationWarperBase<PlaneProjector>

2、拼接流程

http://docs.opencv.org/2.4.2/modules/stitching/doc/introduction.html#stitching-pipeline

3、不妨先按照最基本的stitch先实现一把。

【已经实现】

所以可以试着先把最简单的这个stitch跑一下。

stitchpipeline:

http://docs.opencv.org/2.4.2/modules/stitching/doc/introduction.html#stitching-pipeline

应该在哪里有翻译的吧,这么看很慢的。。。

This figure illustrates the stitching module pipeline implemented in the Stitcher class. Using that class it’s possible to configure/remove some steps, i.e. adjust the stitching pipeline according to the particular needs. All building blocks from the pipeline are available in the detail namespace, one can combine and use them separately.

The implemented stitching pipeline is very similar to the one proposed in [BL07].

下面这张图阐释了在stitcher类里面的拼接模型的实现过程。使用这个类是可以配置或者一出一些步骤的,比如根据特定需要调整拼接流程。拼接流程中的所有构建块儿在具体的命名空间中都是可达的【利用空间名::的方式可以调用的】,【这样就可以根据需求】分部的组合或者使用他们。拼接流程的实现同这个人提到的十分相似。[BL07]


[BL07]


M. Brown and D. Lowe. Automatic Panoramic Image Stitching using Invariant Features. International Journal of Computer Vision, 74(1), pages 59-73, 2007.

BL07 指的是布朗先生和 大卫洛尔先生使用稳定特征自动全景图像拼接。计算机视觉国际期刊,74(1),页面 59-73,2007.

然后这多日来的成果:

可以优化的点:

1、每张图片输入后的判空操作,即用户输入的是否是一个靠谱的图片  容易

2、合理的预览功能,毕竟在一开始将所有的图片弹出不友好,在此基础上可以根据小图标的预览来,增加或者减少图片。  需要时间

3、拼接过程中,需要给出一个友好提示,让用户进行等待。而不是点击同没点击一样。容易

4、软件介绍按钮 容易

5、本拼图是基本版,与高级版存在平滑等很多内容的偏差 需要时间

6、发行版本有过多的dll文件,可以合并成一个exe文件,程序会更加简洁。避免因为误删某一个dll而导致程序不可使用。 需要时间

7、文件保存时可以加上一个时间戳。防止由于保存时不小心点击了确定,覆盖了之前拼接好的图像。  容易

8、预览图片时,图片尺度大小是否可以调节,无法完整观看图片情况。 需要时间

致命的点:

9、输入图片必须是,具有相关性的图片,否则会终止。 需要时间

10、输入的图片不能有噪声图片。否则也会终止。 9和10是同一个问题。

此时需要重新启动程序运行。

时间: 2024-10-28 20:27:02

opencv拼接相关1的相关文章

OpenCV连通域相关操作

连通域反选 在使用Opencv的findcontours函数寻找连通域轮廓时,可能需要使用到类似PS中的选区反选功能. 以下对这一部分进行说明: 在findcontours函数中的mode参数中选择CV_RETR_CCOMP两级轮廓查找, 构建反选的选区范围为图像大小 vector<cv::Point> boundcontours(4); boundcontours[0] = cv::Point(0, 0); boundcontours[1] = cv::Point(0, src.rows-1

opencv中相关的矩阵运算

一.矩阵Mat I,img,I1,I2,dst,A,B;double k,alpha;Scalar s;1.加法I=I1+I2;//等同add(I1,I2,I);add(I1,I2,dst,mask,dtype);scaleAdd(I1,scale,I2,dst);//dst=scale*I1+I2;2.减法absdiff(I1,I2,I);//I=|I1-I2|;A-B;A-s;s-A;-A;subtract(I1,I2,dst);3.乘法I=I.mul(I);//点乘,I.mul(I,3);

python字符串拼接相关

#字符串拼接#str.join(元组.列表.字典.字符串) 之后生成的只能是字符串.str = "-";seq = ("a", "b", "c"); # 字符串序列sqr=['a','b','c','sss']#listssr=str.join(sqr)print('='.join(ssr)) print (str.join(sqr));print (str.join(seq)); seq = {'hello':'nihao'

OpenCV 2.4.8组件结构全解析

转自: http://blog.csdn.net/huang9012/article/details/21811271 之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇. 至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构.

opencv头文件

转载自:http://blog.csdn.net/aaron121211/article/details/51526901 1. .hpp文件是.h和.cpp文件在一起的2. #include <opencv2/opencv.hpp> 就包含了opencv库所有头文件,所以很多时候都是直接include 3.一些用到的库介绍 [highgui] --也就是high gui,高层GUI图形用户界面,包含媒体的I / O输入输出, 视频捕捉.图像和视频的编码解码.图形交互界面的接口等内容 [cal

【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析

之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇. 至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构. 我们进入到D:\ProgramFiles\opencv\build\include目录,可以看到有opencv和open

openCV之头文件分析

我们利用openCV开源库进行项目开发时,往往要牵涉到头文件的添加问题,而openCV中头文件众多,该如何选择呢?下面对openCV2.4.10的头文件进行一个简单的梳理,以便能够快速的添加对应的头文件. 1.首先看下opencv文件夹中的头文件 其中cv.h中包含的头文件: #include "opencv2/core/core_c.h"#include "opencv2/core/core.hpp"#include "opencv2/imgproc/i

opencv模块介绍

opencv主要模块介绍: [calib3d]——其实就是就是Calibration(校准)加3D这两个词的组合缩写.这个模块主要是相机校准和三维重建相关的内容.基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等.[contrib]——也就是Contributed/Experimental Stuf的缩写, 该模块包含了一些最近添加的不太稳定的可选功能,不用去多管.2.4.8里的这个模块有新型人脸识别,立体匹配,人工视网膜模型等技术. [core]——核心

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho