OpenCV两张图片的合并

转载请注明出处。。!

http://blog.csdn.net/zhonghuan1992





OpenCV两张图片的合并






原理:

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

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

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的过程是以下的公式:

OpenCV两张图片的合并

这里的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:

OpenCV两张图片的合并

图片2:

OpenCV两张图片的合并

合并后的图片:

OpenCV两张图片的合并

上一篇:指向class的指针使用方法实例


下一篇:Android中Handler使用浅析