OPenCV3.2 图像的线性混合
2017-10-06 17:50
381 查看
最近一直在学OPenCV,正好学到图像的线性混合,我准备把其中的一些原理和注意点和大家分享下。
原理:
其中α的取值范围为0~1之间。
注意点:
输入的两幅图像一定要有相同的尺寸和类型
函数说明:
实现线性混合主要是利用OPenCV中的addWeighted函数。
void cv::addWeighted ( InputArray src1,
double alpha,
InputArray src2,
double beta,
double gamma,
OutputArray dst,
int dtype = -1
)
addWeighted计算两个数组的加权和。利用如下公式:
参数:
src1:第一个输入数组。
alpha: 第一个数组元素的权重。
src2 :第二个输入数组,和src1具有相同大小和通道数
beta :第二个数组元素的权重。
gamma :增加到每个和的标量。
dst :输出数组,和输入数组有相同的尺寸和通道数
dtype :输出数组的可选深度;当两个输入数组都具有相同的深度时,dtype可以设置为- 1,这将等同于src1.depth()。
实现代码如下:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src1Image = imread("mogu.jpg");
Mat src2Image = imread("rain.jpg");
Mat dstImage;
if (!src1Image.data)
{
cout << "could not load mogu.jpg..." << endl;
return -1;
}
if (!src2Image.data)
{
cout << "could not load rain.jpg..." << endl;
return -1;
}
namedWindow("mogu", CV_WINDOW_AUTOSIZE);
namedWindow("rain", CV_WINDOW_AUTOSIZE);
imshow("mogu", src1Image);
imshow("rain", src2Image);
if (src1Image.size() == src2Image.size() && src1Image.type() == src2Image.type())//保证两幅输入图像有相同的大小和类型
{
double alpha = 0.5;
double beta = 1 - alpha;
addWeighted(src1Image, alpha, src2Image, beta,0.0, dstImage);
}
else
{
cout << "could not blend ..." << endl;
return -1;
}
namedWindow("blend image", CV_WINDOW_AUTOSIZE);
imshow("blend image", dstImage);
waitKey(0);
return 0;
}运行结果:
原理:
其中α的取值范围为0~1之间。
注意点:
输入的两幅图像一定要有相同的尺寸和类型
函数说明:
实现线性混合主要是利用OPenCV中的addWeighted函数。
void cv::addWeighted ( InputArray src1,
double alpha,
InputArray src2,
double beta,
double gamma,
OutputArray dst,
int dtype = -1
)
addWeighted计算两个数组的加权和。利用如下公式:
参数:
src1:第一个输入数组。
alpha: 第一个数组元素的权重。
src2 :第二个输入数组,和src1具有相同大小和通道数
beta :第二个数组元素的权重。
gamma :增加到每个和的标量。
dst :输出数组,和输入数组有相同的尺寸和通道数
dtype :输出数组的可选深度;当两个输入数组都具有相同的深度时,dtype可以设置为- 1,这将等同于src1.depth()。
实现代码如下:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src1Image = imread("mogu.jpg");
Mat src2Image = imread("rain.jpg");
Mat dstImage;
if (!src1Image.data)
{
cout << "could not load mogu.jpg..." << endl;
return -1;
}
if (!src2Image.data)
{
cout << "could not load rain.jpg..." << endl;
return -1;
}
namedWindow("mogu", CV_WINDOW_AUTOSIZE);
namedWindow("rain", CV_WINDOW_AUTOSIZE);
imshow("mogu", src1Image);
imshow("rain", src2Image);
if (src1Image.size() == src2Image.size() && src1Image.type() == src2Image.type())//保证两幅输入图像有相同的大小和类型
{
double alpha = 0.5;
double beta = 1 - alpha;
addWeighted(src1Image, alpha, src2Image, beta,0.0, dstImage);
}
else
{
cout << "could not blend ..." << endl;
return -1;
}
namedWindow("blend image", CV_WINDOW_AUTOSIZE);
imshow("blend image", dstImage);
waitKey(0);
return 0;
}运行结果:
相关文章推荐
- OpenCV学习笔记(四):ROI区域图像叠加和图像线性混合
- C/C++ OpenCV图像的线性混合
- opencv图像线性混合操作
- OpenCV 学习记录4 ROI区域图像叠加及线性图像混合
- opencv学习(十一)// ROI // 图像叠加 // 线性混合 // ROI+线性混合
- OpenCV入门,线性混合 使用addWeight函数将两幅图像叠加
- 【OpenCV】图像线性混合
- opencv 学习之图像可调节线性混合
- 【OpenCV3图像处理】线性滤波:均值滤波,高斯滤波
- opencv之图像混合(blending)
- 1基于opencv的图像读_写_显示_初级混合
- kinect2.0 opencv3.2深度图像提取(方式一)
- 【OpenCV入门教程之五】 分离颜色通道&多通道图像混合
- [转]【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析
- 【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析
- Opencv 学习笔记之图像线性滤波综合示例
- 【OpenCV入门教程之五】 分离颜色通道&多通道图像混合
- OpenCV学习第六篇:图像混合
- OpenCV 多通道图像混合
- OpenCV 简单的图像混合和滑动条使用