【opencv4.3.0教程】10之图像混合(addweight)

2023-12-11 20:32

本文主要是介绍【opencv4.3.0教程】10之图像混合(addweight),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、图像混合

1、什么是图像混合

2、图像混合的数学原理

3、API - addweight

二、代码实战

1、代码分析

2、全部代码

3、执行结果


前言

前一篇文章,我们讲到了图像的颜色空间转换和类型转换,那是以后我们可能经常会用到的操作。

今天这篇文章给大家带来的是图像的混合,我们将带领大家一起了解什么是图像混合?如何使用opencv进行图像混合,让我们一起走进今天的文章看一下吧!

一、图像混合

1、什么是图像混合

图像混合,怎么理解呢?假设我们有两个颜料板,每个颜料板都有m×n个格子,每个格子中有一个颜色,对应位置的,放到一起,搅拌均匀。那我们每个格子都会得到一个新的颜色。

对于图像来说,我们有两个大小相同的图像,我们将对应位置的像素相加,就可以得到一个新的像素,每个格子颜料不同,占比不同,得到的像素也不同,像素也可以设置比例,两个像素通过调整比例,可以得到很多的图像。

 

2、图像混合的数学原理

根据上面的理解,我们知道图像混合就是按照比例将来那个幅图像对应位置的像素点加起来。

这个很好理解,使用数学公式表达如下:g表示的是混合后的图像,α表示的是其中一幅图像所占比重,那另一幅图像所占比重就是1-α。f表示的是用于混合的图像。

上面这是很简单的混合,就是直接按比例混合,如果我们想在添点料呢?

这个很好理解,使用数学公式表达如下:g表示的是混合后的图像,α表示的是其中一幅图像所占比重,那另一幅图像所占比重就是1-α。f表示的是用于混合的图像。

3、API - addweight

接下来我们就来说一下这个对应的API,定义如下:

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,                     double beta,double gamma, OutputArray dst, int dtype = -1
);

函数参数含义如下:

(1)InputArray类型的src1,输入图像。

(2)double类型的alpha,输入图像src1的alpha值(所占比重)

(3)InputArray类型的src2,输入图像。

(4)double类型的beta,输入图像src2的beta值(所占比重)

(5)double类型的gamma,gamma值,添加到每个和的标量。

(6)OutputArray类型的dst,输出图像,其大小和通道数与输入数组相同。

(7)int类型的dtype ,输出数组的可选深度;当两个输入数组具有相同的深度时,dtype可以设置为-1,这相当于src1.depth()。默认为-1。

在使用过程中,我们需要注意:

1.两个输入图像的尺寸和类型必须要一致,所以我们要先检测,才能做混合。

2.一般最后一个参数都是默认的,采用和输入图像相同的深度。

二、代码实战

1、代码分析

我们要获取两个图像,然后将这两个图像进行混合。

所以我们要先读取两个图像,保证读取成功并展示:

	Mat ZWJ = imread("./image/YT_ZWJ.png");Mat ZM = imread("./image/YT_ZM.png");if (!ZWJ.data && !ZM.data){cout << "ERROR : could not load image.\n";return -1;}imshow("张无忌", ZWJ);imshow("赵敏", ZM);

然后我们就要考虑混合,混合的时候,我们需要定义几个参数,根据自己需要,也可以设置固定值,比如:

	double alpha = 0.5;Mat YT;

最后我们需要判断,两个输入图像类型是否一致,图像尺寸是否一致,如果一致,我们就进行图像混合并输入,如果不一致我们就进行提示。

	if (ZWJ.rows == ZM.rows && ZWJ.cols == ZM.cols && ZWJ.type() == ZM.type()) {addWeighted(ZWJ, alpha, ZM, (1.0 - alpha), 0.0, YT);imshow("倚天屠龙", YT);}else {cout<<"The size of images is not same.\n";return -1;}

2、全部代码

全部代码如下:

/*作者:水亦心内容:core-图像混合时间:2020年5月27日
*/#include<iostream>
#include<opencv2\opencv.hpp>using namespace std;
using namespace cv;int main() {Mat ZWJ = imread("./image/YT_ZWJ.png");Mat ZM = imread("./image/YT_ZM.png");if (!ZWJ.data && !ZM.data){cout << "ERROR : could not load image.\n";return -1;}imshow("张无忌", ZWJ);imshow("赵敏", ZM);double alpha = 0.5;Mat YT;if (ZWJ.rows == ZM.rows && ZWJ.cols == ZM.cols && ZWJ.type() == ZM.type()) {addWeighted(ZWJ, alpha, ZM, (1.0 - alpha), 0.0, YT);imshow("倚天屠龙", YT);}else {cout<<"The size of images is not same.\n";return -1;}waitKey(0);return 0;
}

3、执行结果

执行结果如下:

 

这篇关于【opencv4.3.0教程】10之图像混合(addweight)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482023

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas