OpenCV两张图片的合并

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992

OpenCV两张图片的合并

原理:

两张图片合并,想想图片是用一个个像素点来存储,每个像素点有他的值。那么合并,无非就是像素点值得合并,使用的公式可以就是给两张图片分别一个权值,然后求和。向下面这个公式:

的值位于0至1之间

OpenCV实现:

那么我们在openCV内怎么实现呢?在openCV中,有一个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两张图片的合并

时间: 2024-11-01 21:38:41

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

两张图片的合并处理

- (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2 { UIGraphicsBeginImageContext(image1.size); // Draw image1 [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; // Draw image2 [image2 drawInRect:CGRectMake(0,

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

1. 原理 对两张图片使用如下公式可以得到两张图片的混合图片, 其中f0(x),f1(x)分别是图片1和图片2同一位置的像素点. 2. OpenCV中的AddWeight函数 函数和参数说明: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1) src1 – first input array. alph

//--合并两张图片 BITMAP

private Bitmap toConformBitmap(Bitmap background, Bitmap foreground) { //--合并两张图片 if( background == null ) { return null; } int bgWidth = background.getWidth(); int bgHeight = background.getHeight(); //int fgWidth = foreground.getWidth(); //int fgHei

opencv_判断两张图片是否相同

QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载好文件放入C:/Anaconda3/Scripts 文件夹, 然后 用pip install opencv安装 # -*- coding: utf-8 -*- """ Created on Sat Dec 24 10:42:10 2016 @author: daxiong &q

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

使用vs2017新建一个项目 混合A,B两张图的基础算法: outColor = srcColor * srcAlpha + destColor * (1 - srcAlpha) 输出颜色 = 源颜色 * 源混合因子 + 目标颜色 * ( 1 - 源混合因子 ) 这里scrAlpha从源图的Alpha通道获取 代码如下: // alphablendimg.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/op

python中将两个list合并为字典

两个list合并为字典的代码如下: def Run(): list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d","e"]; dict={}; i=0; length=len(list2); while i<length: 'dict[list2[i]]=list3[i];这种方法也可以' dit={list2[i]:list3[i]}; dict.

C# 判断两张图片是否一致的快速方法

#region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img">图片一</param> /// <param name="bmp">图片二</param> /// <returns>是否一致</returns> public bool IsSameImg(Bitmap img

【Open CV基础】两张图片的Alpha融合

在Open CV的图像操作中,我们可以通过cvAddWeighted函数实现两张图片的融合,函数完整签名为: void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst ); 参数 意义 src1 第一张图片 alpha 融合时的第一张图片参数 src2 第二种图片 beta 融合时的第二种图片参数 gamma 常数项,往往取决于像素要调

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

要想两张图片叠加,只需在circle添加一个Position:absolute就OK了 以上几步,很多大侠前辈都已经说过,相信不用再啰嗦,我想说的是一种扩展,将示例放到右边,可能因为我悟性低,研究了一上午才研究出来,但我还是想说出来,一来加深自己的记忆,二来希望其他朋友不必走这些弯路,希望支持的朋友顶一下,谢谢!