一、線性融合操作
線性混合操作 也是一種典型的二元(兩個輸入)的 像素操作 :
通過在範圍 內改變 ,這個操可以用來對兩幅圖像或兩段視頻產生時間上的 畫面疊化 (cross-dissolve)效果,就像在幻燈片放映和電影製作中那樣
二、操作實踐
#include <QCoreApplication>
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <QDebug>
#include <QDir>
#include <QFile>
#include "iostream"
using namespace std;
using namespace cv;
int main()
{
double alpha = 0.5; double beta;
Mat src1, src2, dst;
//! 讀取圖片
src1 = imread("C:/2.png");
src2 = imread("C:/3.png");
if( !src1.data ) { qDebug("Error loading src1 \n"); return -1; }
if( !src2.data ) { qDebug("Error loading src2 \n"); return -1; }
//! 調整兩幅圖片保持一致,否則會出錯
resize(src2, src2, Size(src1.cols, src1.rows));
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
imshow( "Linear Blend", dst );
waitKey(0);
return 0;
}
src1 src2 dst
參考資料:
附錄1:addWeighted()函數實現圖像線性混合
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
第一個參數,InputArray類型的src1,表示需要加權的第一個數組,常常填一個Mat。
第二個參數,alpha,表示第一個數組的權重
第三個參數,src2,表示第二個數組,它需要和第一個數組擁有相同的尺寸和通道數。
第四個參數,beta,表示第二個數組的權重值。
第五個參數,dst,輸出的數組,它和輸入的兩個數組擁有相同的尺寸和通道數。
第六個參數,gamma,一個加到權重總和上的標量值。看下面的式子自然會理解。
第七個參數,dtype,輸出陣列的可選深度,有默認值-1。;當兩個輸入數組具有相同的深度時,這個參數設置爲-1(默認值),即等同於src1.depth()。