转载请注明出处。。!

http://blog.csdn.net/zhonghuan1992





OpenCV两张图片的合并






原理:

两张图片合并,想想图片是用一个个像素点来存储。每一个像素点有他的值。

那么合并,无非就是像素点值得合并,使用的公式能够就是给两张图片分别一个权值。然后求和。向以下这个公式:

的值位于0至1之间

OpenCV实现:

那么我们在openCV内怎么实现呢?在openCV中,有一个addWeighted函数。函数详细调用能够看

highlight=addweighted#addweighted">这里

读取完两个要合并的图片后。(注意。这里合并的图片必须是同样的size和type,就是说图片长宽像素数一样。color存储方式要一样。我选的是388*388的png图片

/// Read image ( same size, same type )
src1= imread("zh.png");
src2= imread("zh2.png");

调用addWeighted函数。

beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0,dst);

这里src1和src2都是读取之后的矩阵,alpha和beta是他们的权重。

事实上addWeighted的过程是以下的公式:

这里的Y是0.0。

好,让我们动手来做这个操作。代码例如以下:

#include <cv.h>
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <highgui.h>
#include <iostream> using namespace cv; int main()
{
double alpha = 0.5; double beta; double input; Mat src1, src2, dst; /// Ask the user enter alpha
std::cout << " Simple Linear Blender " << std::endl;
std::cout << "-----------------------" << std::endl;
std::cout << "* Enter alpha [0-1]: ";
std::cin >> input; /// We use the alpha provided by the user if it is between 0 and 1
if (input >= 0.0 && input <= 1.0)
{
alpha = input;
} /// Read image ( same size, same type ),注意,这里一定要同样大小。同样类型,否则出错
src1 = imread("zh.png");
src2 = imread("zh2.png"); if (!src1.data) { printf("Error loading src1 \n"); return -1; }
if (!src2.data) { printf("Error loading src2 \n"); return -1; } /// Create Windows
namedWindow("Linear Blend", 1); beta = (1.0 - alpha);
addWeighted(src1, alpha, src2, beta, 0.0, dst); //这里调用了addWeighted函数,得到的结果存储在dst中 imshow("Linear Blend",dst); waitKey();
return 0;
}

结果:

图片1:

图片2:

合并后的图片:

OpenCV两张图片的合并的更多相关文章

  1. opencv::两张图片的线性融合

    理论-线性混合操作 g(x) 表示 融合图片中的像素点,f0(x) 和 f1(x) 分别表示背景和前景图片中的像素点. //参数1:输入图像Mat – src1 //参数2:输入图像src1的alph ...

  2. java实现把两张图片合并(Graphics2D)

    package com.yin.text; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.i ...

  3. OpenCV入门:(四:混合两张图片)

    1. 原理 对两张图片使用如下公式可以得到两张图片的混合图片, 其中f0(x),f1(x)分别是图片1和图片2同一位置的像素点. 2. OpenCV中的AddWeight函数 函数和参数说明: ) s ...

  4. opencv_判断两张图片是否相同

    QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下 ...

  5. iOS把两张图片合成一张图片

    0x00 步骤 先读取两张图片把创建出CGImageRef 创建上下文画布 把图片依次画在画布指定位置上 从上下文中获得合并后的图片 关闭上下文 释放内存 0x01 代码实现 - (void)comp ...

  6. 图像处理:AlphaBlend混合两张图片

    使用vs2017新建一个项目 混合A,B两张图的基础算法: outColor = srcColor * srcAlpha + destColor * (1 - srcAlpha) 输出颜色 = 源颜色 ...

  7. linux 两个文件合并

    可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...

  8. HTML两张图片叠加问题的进一步修改

    要想两张图片叠加,只需在circle添加一个Position:absolute就OK了 以上几步,很多大侠前辈都已经说过,相信不用再啰嗦,我想说的是一种扩展,将示例放到右边,可能因为我悟性低,研究了一 ...

  9. 【转载】Python中如何高效实现两个字典合并,三种方法比较。

    本文转载自:http://www.pythoner.com/13.html Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个 ...

随机推荐

  1. 基于MMSeg算法的中文分词类库

    原文:基于MMSeg算法的中文分词类库 最近在实现基于lucene.net的搜索方案,涉及中文分词,找了很多,最终选择了MMSeg4j,但MMSeg4j只有Java版,在博客园上找到了*王员外*(ht ...

  2. crontab linux

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  3. 研读asp.net排课功能实现学习笔记

    1.datatable.select 方法,返回的是一个datarow数组 DataRow[] drs =                    dtHBKC.Select("Subject ...

  4. Jar包转成Dll的方式(带嵌套的jar也能做) (转)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

  5. 基于Chrome开源提取的界面开发框架开篇--转

    初衷 一直希望VC开发者能够方便的开发出细腻高品质的用户界面.我喜欢C++,选择的平台是Windows,所以大部分时间用VC.我自身不排斥其他技术或者开发语言或者开发工具,都去了解,了解的目的是想吸取 ...

  6. 图像编程学习笔记1——bmp文件结构处理与显示

    文本内容转载自<数字图像处理编程入门>,代码为自己实现 1.1图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个 ...

  7. hdu 3290 (简单dfs)

    题意:没有儿子的节点所结苹果数是节点的编号,有儿子的所结苹果是儿子数量(k+1)/2个,求跟节点的苹果数 直接递归一下,先求出所有儿子的苹果树,在排序,,刚开始以为1就是根节点,根节点不确定,, #i ...

  8. C++教材

    C++语言: 1.<Essential C++>:Stanley B.Lipman著. 旁枝暂略,主攻核心,轻薄短小.附习题与解答,适合刚開始学习的人. 2.<The C++ Pro ...

  9. struts2文件上传限制大小问题

    struts2默认文件上传大小为2M,如需改动默认大小,解决方法例如以下: <struts> <constant name="struts.multipart.maxSiz ...

  10. block存储区域——怎样验证block在栈上,还是堆上

    Block存储区域 首先,须要引入三个名词: ● _NSConcretStackBlock ● _NSConcretGlobalBlock ● _NSConcretMallocBlock 正如它们名字 ...