理论
一个有趣的二元(双输入)运算符是线性混合运算符:
通过从0→1改变α,此运算符可用于执行两个图像或视频之间的时间交叉融合。
代码
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main( int argc, char** argv )
{
double alpha = 0.5; double beta; double input;
Mat src1, src2, dst;
std::cout<<" Simple Linear Blender "<<std::endl;
std::cout<<"-----------------------"<<std::endl;
std::cout<<"* Enter alpha [0-1]: ";
std::cin>>input;
if( input >= 0.0 && input <= 1.0 )
{ alpha = input; }
src1 = imread("../../images/LinuxLogo.jpg");
src2 = imread("../../images/WindowsLogo.jpg");
if( !src1.data ) { printf("Error loading src1 \n"); return -1; }
if( !src2.data ) { printf("Error loading src2 \n"); return -1; }
namedWindow("Linear Blend", 1);
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
imshow( "Linear Blend", dst );
waitKey(0);
return 0;
}
解释
- 因为我们要执行:
我们需要两个源图像(f0(x)和f1(x))。 所以,我们以通常的方式加载它们:
- 现在我们需要生成g(x)图像。 为此,add_weighted:addWeighted函数非常方便:
- 创建窗口,显示图像并等待用户结束程序。
运行结果
参考网址:https://docs.opencv.org/3.1.0/d5/dc4/tutorial_adding_images.html