【拜小白opencv】6-两幅图像融合简单实现1;addWeighted()函数;两幅图像尺寸相同时;
来源:互联网 发布:网络交友的弊端300字 编辑:程序博客网 时间:2024/05/16 15:37
博主力求用最简单的语言将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有些错误,还望读者能够指教探讨,大家共同进步。
博主机器配置为:VS2013+opencv2.4.13+Win-64bit。
如果本人写的能给读者带来一点点的帮助,我就很开心了。
======================分割线===================
在图像处理的操作中经常会遇到将两幅图像融合成一张图像的问题,在opnecv里利用addWeighted()函数可以很容易实现这个功能。
- 在addWeighted()函数中,输入两个图像image1 和 image2。
- 两个图像可以是任何象素类型,只要它们的类型相同。它们可以是单通道或是三通道,只要它们相符。
- 且图像尺寸大小必须相同,否则编译会出错!!!
1.addWeighted()函数
此函数的作用是将两幅图像进行融合。计算两个数组的加权和(dst = alpha*src1 + beta*src2 + gamma)。
首先看一下addWeighted()函数定义:
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
参数说明:
- 第一个参数:src1,表示进行加权操作的第一个图像对象,即输入图片1。
- 第二个参数:double型的alpha,表示第一个图像的加权系数,即图片1的融合比例。
- 第三个参数:src2,表示进行加权操作的第二个图像对象,即输入图片2。
- 第四个参数:double型的beta,表示第二个图像的加权系数,即图片2的融合比例。很多情况下,有关系 alpha+beta=1.0。
- 第五个参数:double型的gamma,表示一个作用到加权和后的图像上的标量,可以理解为加权和后的图像的偏移量。
- 第六个参数:dst,表示两个图像加权和后的图像,尺寸和图像类型与src1和src2相同,即输出图像。
- 第七个参数:输出阵列的可选深度,有默认值-1。当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。
官方文档解释说明如下:
公式表达即为;
- dst = src1[I] * alpha + src[2] * beta + gamma;
============================分割线==========================
代码演示
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv;using namespace std;int main(){//【0】定义相关变量 Mat dog, ac;//【1】读取原始图像并检查图像是否读取成功 dog = imread("D:\\OutPutResult\\ImageTest\\adog.jpg");ac = imread("D:\\OutPutResult\\ImageTest\\ac.jpg");if (dog.empty() && ac.empty())//检验两幅图像是否同时存在{cout << "读取图像有误,请重新输入正确路径!\n";return -1;}//【3】显示原始图像namedWindow("图像1dog");//创建窗口imshow("图像1dog", dog);//显示窗口namedWindow("图像2ac");imshow("图像2ac", ac);//【4】利用addWeighted()函数对两幅图像进行融合addWeighted(dog, 0.6, ac, 0.4, 0., dog);//最后融合效果显示在dog图像上。/*若不想毁坏原始dog图像,也可建立一个与dog图像类型尺寸一样的新图像,将融合后的图像保存到上面。建立方法:Mat newImage(dog.size(), dog.type());//newImage与dog类型尺寸相同*/namedWindow("图像1与图像2融合效果图");imshow("图像1与图像2融合效果图", dog);//【5】保持等待状态 waitKey();return 0;}
======================分割线=====================
=====================分割线==================
程序说明
注意:要融合的两个图像的尺寸与类型必须一致!!!但处理图像过程中,往往会遇到两幅图像尺寸不一致情况怎么办呢?
别着急,下一节,我将介绍两种方法去解决。
=====================END======================
阅读全文
0 0
- 【拜小白opencv】6-两幅图像融合简单实现1;addWeighted()函数;两幅图像尺寸相同时;
- 【拜小白opencv】7-两幅图像融合简单实现2;addWeighted()函数;两幅图像尺寸不相同时;
- Opencv实现两幅图像融合
- [转]addWeighted() 对两幅图像进行融合
- opencv 两幅图像融合
- opencv-输入两幅图像实现线性融合
- OpenCV学习--实现两幅图像的融合
- 【拜小白opencv】11-综合示例-两幅图像融合-摄像头采集图像-滑动条
- 用OpenCV叠加(融合)两幅图像
- opencv学习笔记之两幅图像显式融合
- 关于opencv 图像融合addWeighted的使用方法
- OpenCv实现两幅图像的拼接
- OpenCV - 简单图像融合
- opencv找出两幅图像不同!
- 使用OpenCV对两幅图像求和
- opencv 两幅图像直接相减
- opencv实现两幅图片的加权融合
- opencv c++函数 基础4 使用OpenCV对两幅图像求和(求混合(blending))
- VGA GPU passthrough qemu虚拟桌面pci穿透
- 冒泡排序原理(java实现)
- 朱有鹏免费嵌入式,单片机视频
- 戴尔台式机bios设置u盘启动教程
- hive redis 集群模式udf 写入
- 【拜小白opencv】6-两幅图像融合简单实现1;addWeighted()函数;两幅图像尺寸相同时;
- Fluid Mask 3.3.16 for Mac 最新版 独立运行/PS 插件 均完美支持 10.12 系统 简体中文汉化版 简单易用的抠图软件
- AlexNet
- [移动战略说 · 第一期] 智能硬件产品开发从 0 到 1
- C++经典书籍推荐
- 笨办法学 Python · 续 练习 29:`diff`和`patch`
- 服务(Service)-《Android第一行代码》笔记
- 时间戳转换为时间
- python 集合基本知识