ZH de 部落格

转载请注明出处!!!

OpenCV两张图片的合并

原理:

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

的值位于0至1之间

OpenCV实现:

那么我们在openCV内怎么实现呢?在openCV中,有一个函数,函数具体调用可以看。

读取完两个要合并的图片后,(注意,这里合并的图片必须是相同的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 alphastd::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 1if (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 WindowsnamedWindow("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:

合并后的图片:

版权声明:本文为博主原创文章,未经博主允许不得转载。

懂得倾听别人的忠告。

ZH de 部落格

相关文章:

你感兴趣的文章:

标签云: