OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算

1. 加法运算

通过使用API add来执行图像的加法运算

cv2.add(src1, src2)需要再其中传入两张图片。

图片就是矩阵,图片的加法运算就是矩阵的加法运算。

因此加法运算中要求两张图的shape必须是相同的。

首先,我们在网上下载两张小猫和小狗的照片用作练习。

通过shape查看两种图片的形状。

import cv2
import numpy as npdog = cv2.imread("dog.png", )
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)

输出结果如下: 

在做加法之前需要把图片的形状变得完全一致。

可以通过ndarray的切片的方式取出完全一样的形状。

但是因为是切片所以狗的图片只有原图像的一部分。

示例代码如下:

import cv2
import numpy as npdog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)new_dog = dog[:370, :550]
new_cat = cat[:370, :550]
print(new_dog.shape)
print(new_cat.shape)new_img = cv2.add(new_dog, new_cat)   # 加擦操作要求两个图片的长宽相同,通道数相同。 黑白图片为二维,彩色图片是三维的。cv2.imshow("dog", new_dog)
cv2.imshow("cat", new_cat)
cv2.imshow("new_img", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

add的计算规则就是两个图对应位置的元素进行相加,如果超过了255,则全部变成255。

因此两个图片相加,图片整体会变得更亮。

2. 图片与单个数字相进行运算

示例代码如下:

import cv2
import numpy as npdog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)new_dog = dog[:370, :550]
new_cat = cat[:370, :550]
print(new_dog.shape)
print(new_cat.shape)
print(dog[:3, :3])
dog += 100
print("-----------------------------------------")
print(dog[:3, :3])
cv2.imshow("dog", new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

发现图像的结果已经失真,这是因为图片与数字运算中,每个数组都数字都会与100进行加减法,最后超出255的数字会被截断,相当于%256取余数。

3. 减法运算 subtract

使用API---cv2.subtract(str1, str2)

对应位置的元素进行相减,减完如果小于0,则同意变成0

4. 乘法运算 multiply

使用API---cv.multiply(str1,str2)

图片白色会更多,因为乘法相对于加法会使得数字更容易超过255

5. 除法运算 divide

使用API---cv2.divide(str1,str2)

图片黑色会更多,因为除法相对于减法会使得数字更趋近于0.

四种运算中加法使用相对较多。

综合的演示练习代码如下所示:

# 行是高度, 列是宽度
import cv2
import numpy as npdog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)new_dog = dog[:370, :550]
new_cat = cat[:370, :550]
print(new_dog.shape)
print(new_cat.shape)# 加法运算
new_img = cv2.add(new_dog, new_cat)   # 加擦操作要求两个图片的长宽相同,通道数相同。 黑白图片为二维,彩色图片是三维的。
# 减法运算
new_img2 = cv2.subtract(new_dog, new_cat)
# 乘法运算
new_img3 = cv2.multiply(new_dog, new_cat)
# 除法运算
new_img4 = cv2.divide(new_dog, new_cat)# cv2.imshow("dog", new_dog)
# cv2.imshow("cat", new_cat)
cv2.imshow("new_img", new_img4)
cv2.waitKey(0)
cv2.destroyAllWindows()# 与单个数字进行运算
# print(dog[:3, :3])
# dog += 100
# print("-----------------------------------------")
# print(dog[:3, :3])
# cv2.imshow("dog", new_dog)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

二、图片的融合

图片的融合不是简单的加法,相当于用图片进行了线性运算

new_img = img1*w1 + img2*w2 +bise*(其中bise为偏差,控制图片整体颜色变深或变浅)

使用API---addWeighted(src1, alpha,src2,beta,gamma)

alpha是第一个权重参数

beta是第二个1权重参数

gamma是偏差

示例代码如下:

import cv2dog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")new_dog = dog[:370, :550]
new_cat = cat[:370, :550]new_img = cv2.addWeighted(new_cat,0.5, new_dog, 0.5, 0)
new_img2 = cv2.addWeighted(new_cat,0.5, new_dog, 0.5, -50)
cv2.imshow("new_img", new_img)
cv2.imshow("new_img2", new_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

可以看出img2相对于img颜色加深,因为偏差使得图像整体亮度-50.

其中权重并不要求其数值之和为1,但是当大于1或小于1时,会改变图像颜色整体的深浅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的旅游网站

目录 前言 开发环境以及工具 项目功能介绍 用户端: 管理端: 详细设计 用户端首页 登录页面 管理端页面 源码获取 前言 本项目是一个基于IDEA和Java语言开发基于SpringBoot的旅游网站。应用包含管理端和用户端等多个功能模块。 改革开放以来&am…

用HTML的原生语法实现两个div子元素在同一行中排列

代码如下&#xff1a; <div id"level1" style"display: flex;"><div id"level2-1" style"display: inline-block; padding: 10px; border: 1px solid #ccc; margin: 5px;">这是第一个元素。</div><div id"…

漏洞复现-任我行CRM系统SmsDataList接口SQL注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

APPnium 自动化实践 :第一步adb 连接手机

1. 下载安装 adb ,添加到环境变量。 ADB Download - Get the latest version of ADB and fastboot 2. 手机开启开发者模式 https://developer.huawei.com/consumer/cn/doc/quickApp-Guides/quickapp-open-developer-option-0000001137005543 3. adb 连接设备 【And…

国家开放大学形成性考核 统一考试 学习资料参考

试卷代号&#xff1a;11107 传感器与测试技术 参考试题 一、单项选择题&#xff08;12小题&#xff0c;每小题3分&#xff0c;共36分&#xff09; 1.以下不属于压电式传感器的特点的是&#xff08; &#xff09;。 A.体积小 B.结构简单…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式&#xff0c;例如在时域中表现出平稳性的动态纹理模式&#xff0c;以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

Python----matplotlib库

目录 plt库的字体&#xff1a; plt的操作绘图函数&#xff1a; plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number)&#xff1a; plt.axes(rect)&#xff1a; plt.subplots_adjust(): plt的读取和显示相关函数&#xff1a; plt库的基础图…

vue和react哪种框架使用范围更广

Vue和React都是非常流行的前端JavaScript框架&#xff0c;它们各自有着广泛的应用场景和支持者。选择使用哪一个框架往往取决于特定的项目需求、开发团队的熟悉程度以及生态系统的偏好。以下是这两个框架的一些主要特点&#xff0c;以帮助比较它们的使用范围&#xff1a; React…

【数据挖掘】基于 LightGBM 的系统访问风险识别(附源码)

基于 LightGBM 的系统访问风险识别 文章目录 基于 LightGBM 的系统访问风险识别一、课题来源二、任务描述三、课题背景四、数据获取分析及说明&#xff08;1&#xff09;登录https://www.datafountain.cn并获取相关数据&#xff08;2&#xff09;数据集文件说明&#xff08;3&a…

进程和计划任务

一、什么是程序 是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二、进程 1.什么是进程 进程&#xff1a;正在运行中的程序&#xff0c;加载到内存…

Python 自学(三) 之序列的应用

目录 1. 序列的含义 2. 序列的索引 P80 3. 序列相加 P81 4. 序列乘法 P82 5. in 关键字 P83 6. 计算序列的最大值max()&#xff0c;最小值min()和长度len() P83 7. 列表的初始化 list() P85 8. 列表元素的添加&#xff0c;…

apache httpd多后缀解析漏洞复现

一、漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。 该漏洞和apache版本和php版本无关,属于用户配置不当造成的解…

vc2017编译从github网站上下载的源码

以ZLmediakit为例 1.下载软件 cmakehttps://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-windows-x86_64.zip Microsoft Visual Studio https://my.visualstudio.com/Downloads?qvisual%20studio%202017&wt.mc_ido~msft~vscom~older-downloads …

Unity DOTS中的baking(二)Baker的触发

Unity DOTS中的baking&#xff08;二&#xff09;Baker的触发 我们知道&#xff0c;当传入Baker的authoring component的值发生变化时&#xff0c;就会触发baking。不过在有些情况下&#xff0c;component所引用的对象没有变化&#xff0c;而是对象自身内部的一些属性发生了变化…

C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信

前言 一直以来上位软件比如C等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题&#xff0c;尤其是C上位软件程序员。传统的方法一般有OPC、Socket 等&#xff0c;直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。 Modbus简介 Modbus特点 1 &#…

书生-浦路大模型全链路开源体系

2023年&#xff0c;大模型成为热门关键词 论文链接 大模型已经成为发展通用人工智能的重要途经 模型评测过程&#xff1a;从模型到应用 全链条开源开发体系 | 数据&#xff1a; 多模态融合 万卷包含文本、图像和视频等多模态数据&#xff0c;涵盖科技、文学、媒体、教育和法…