opencv图像线性混合操作
2017-07-07 14:23
218 查看
图像线性混合的数学原理
G(x)=(1-a)F(x)+aQ(x)
注意事项:
1,a的取值范围为0到1之间
2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像
3,通过对两幅图像的每个像素值做线性加权得到最终的输出图像
4,两幅图像的大小和类型必须完全一致,如果把图像当成一个矩阵
则两个矩阵相加的前提是维度必须一致,否则没有相加的意义。
示例
第一幅参与混合的图像
第二幅参与混合的图像
混合结果
通过混合产生了烟雨朦胧的效果
代码实现
#include <opencv2\core\core.hpp>
#include <opencv2\imgcodecs.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** args)
{
Mat src1, src2, dst;
src1 = imread("mogu.jpg");
src2 = imread("rain.jpg");
if (!src1.data)
{
printf("图像加载错误");
return -1;
}
if (!src2.data)
{
printf("图像加载错误");
return -1;
}
double alpha = 0.5;//混合权重
//混合的两幅图像宽高和类型必须完全一致
if (src1.rows==src2.rows
&&src1.cols==src2.cols
&&src1.type()==src2.type())
{
addWeighted(src1,alpha,src2,(1.0-alpha),0.0,dst);//线性混合
//add(src1,src2,dst);//相加
//multiply(src1,src2,dst);//相乘
imshow("原图-1", src1);
imshow("原图-2",src2);
imshow("混合后的图",dst);
}
else{
printf("两幅图像的大小或者类型不一致,不能混合!");
return -1;
}
waitKey(0);
return 0;
}
G(x)=(1-a)F(x)+aQ(x)
注意事项:
1,a的取值范围为0到1之间
2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像
3,通过对两幅图像的每个像素值做线性加权得到最终的输出图像
4,两幅图像的大小和类型必须完全一致,如果把图像当成一个矩阵
则两个矩阵相加的前提是维度必须一致,否则没有相加的意义。
示例
第一幅参与混合的图像
第二幅参与混合的图像
混合结果
通过混合产生了烟雨朦胧的效果
代码实现
#include <opencv2\core\core.hpp>
#include <opencv2\imgcodecs.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** args)
{
Mat src1, src2, dst;
src1 = imread("mogu.jpg");
src2 = imread("rain.jpg");
if (!src1.data)
{
printf("图像加载错误");
return -1;
}
if (!src2.data)
{
printf("图像加载错误");
return -1;
}
double alpha = 0.5;//混合权重
//混合的两幅图像宽高和类型必须完全一致
if (src1.rows==src2.rows
&&src1.cols==src2.cols
&&src1.type()==src2.type())
{
addWeighted(src1,alpha,src2,(1.0-alpha),0.0,dst);//线性混合
//add(src1,src2,dst);//相加
//multiply(src1,src2,dst);//相乘
imshow("原图-1", src1);
imshow("原图-2",src2);
imshow("混合后的图",dst);
}
else{
printf("两幅图像的大小或者类型不一致,不能混合!");
return -1;
}
waitKey(0);
return 0;
}
相关文章推荐
- opencv 学习之图像可调节线性混合
- OpenCV教程 之 基础操作:图像的读入、输出、访问、Mat类、色彩缩减与线性融合
- C/C++ OpenCV图像的线性混合
- OpenCV入门,线性混合 使用addWeight函数将两幅图像叠加
- opencv学习(十一)// ROI // 图像叠加 // 线性混合 // ROI+线性混合
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- OPenCV3.2 图像的线性混合
- 【OpenCV】图像线性混合
- OpenCV 学习记录4 ROI区域图像叠加及线性图像混合
- OpenCV学习笔记(四):ROI区域图像叠加和图像线性混合
- 图像混合学习。运用加权函数,学习opencv基础操作
- 【转】opencv矩阵图像操作函数
- OpenCV学习之子图像操作
- openCV 矩阵(图像)操作函数---史上最全
- openCV 矩阵(图像)操作函数
- OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
- 基础学习笔记之opencv(11):图像混合
- OpenCV学习之图像操作
- OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
- OpenCV 图像处理——平滑操作