您的位置:首页 > 编程语言 > C语言/C++

opencv(c++)OpenCV添加(混合)两个图像

2017-11-05 10:17 369 查看
参考:

1、https://docs.opencv.org/3.2.0/

2、https://github.com/opencv/opencv/

vs2015 安装插件 image watch

工具–>扩展和更新–>联机 搜索 image watch 安装 重启

视图–>其他窗口–>image watch 打开该窗口

Adding (blending) two images using OpenCV

什么是线性混合以及为什么它是有用的;

如何使用cv :: addWeighted添加两个图像

Theory

下面的解释属于 Computer Vision: Algorithms and Applications

从我们之前的教程中,我们已经知道一些像素运算符。 一个有趣的二元(双输入)算子是线性混合算子:



通过从0→1改变α,这个操作符可以用来执行两个图像或视频之间的时间交叉消解,如在幻灯片和电影制作中所看到的(cool, eh?)

源代码

这里下载源代码。

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using namespace cv;
int main(void)
{
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;
// We use the alpha provided by the user if it is between 0 and 1
if (alpha >= 0 && alpha <= 1)
{
alpha = input;
}
src1 = imread("LinuxLogo.jpg");
src2 = imread("WindowsLogo.jpg");
if (src1.empty()) { std::cout << "Error loading src1" << std::endl; return -1; }
if (src2.empty()) { std::cout << "Error loading src2" << std::endl; return -1; }
beta = (1.0 - alpha);
addWeighted(src1, alpha, src2, beta, 0.0, dst);//dst=src1*alpha+src2*beta+0.0
imshow("Linear Blend", dst);
waitKey(0);
return 0;
}


说明

1、由于我们要执行:



我们需要两个源图像(f0(x)和f1(x))。 所以,我们以通常的方式加载它们:

src1 = imread("../data/LinuxLogo.jpg");
src2 = imread("../data/WindowsLogo.jpg");


警告:

因为我们添加src1 src2,他们都有相同的大小(宽度和高度 通道数不要求一致)和类型。

2、现在我们需要生成g(x)图像。 为此,函数cv :: addWeighted非常方便:

beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);


因为cv :: addWeighted产生:



在这种情况下,gamma是0.0上面代码中的参数。

3、创建窗口,显示图像并等待用户结束程序。

imshow( "Linear Blend", dst );
waitKey(0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: