图像混合, 产生的效果跨越了时间空间.
原理如下面公式, 两张原始图像按权重相加, 最终生成新图像.
函数介绍: addWeighted()
函数原型: void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype = -1);
函数功能: 计算两个数组的加权和.
函数声明:
InputArray src1:: 加权的第一个数组
double alpha: 第一个数组的权重
InputArray src2: 加权的第二个数组
double beta: 第二个数组的权重
double gamma: 计算完权重和, 再加上这个值, 才是最后的结果
OutputArray dst: 输出数组, 与输入数组具有相同大小和通道数
int dtype = -1: 输出阵列的可选深度; 当两个输入数组具有相同的深度时, 使用 dtype
可以设置为 - 1, 这将等效于 src1.depth()
线性混合模式:
- #include <opencv2/opencv.hpp>
- #include <iostream>
- using namespace std;
- using namespace cv;
- int main(int argc, char** argv) {
- /* 载入原图像 */
- Mat src1, src2, dst;
- src1 = imread("D:/shenjianxin.png");
- src2 = imread("D:/xiaobai.png");
- if (!src1.data ) {
- cout << "could not load image1" << endl;
- return false;
- }
- if (!src2.data) {
- cout << "could not load image2" << endl;
- return false;
- }
- imshow("shenjianxin", src1);
- imshow("xiaobai", src2);
- /* 图像融合 */
- double alpha = 0.45;
- if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {
- addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
- }
- else {
- cout << "could not blend photo" << endl;
- return false;
- }
- /* 显示结果 */
- namedWindow("blend demo", CV_WINDOW_AUTOSIZE);
- imshow("blend demo", dst);
- waitKey(0);
- return 0;
- }
原始图
效果图
来源: http://www.bubuko.com/infodetail-3013366.html