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

news2024/9/22 4:15:40

一、图片的四则运算

1. 加法运算

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

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

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

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

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

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

import cv2
import numpy as np

dog = cv2.imread("dog.png", )
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)

输出结果如下: 

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

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

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

示例代码如下:

import cv2
import numpy as np

dog = 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 np

dog = 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 np

dog = 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 cv2

dog = 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.coloradmin.cn/o/1354057.html

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

相关文章

【vue/uniapp】使用 uni.chooseImage 和 uni.uploadFile 实现图片上传(包含样式,可以解决手机上无法上传的问题)

引入: 之前写过一篇关于 uview 1.x 版本上传照片 的文章,但是发现如果是在微信小程序的项目中嵌入 h5 的模块,这个 h5 的项目使用 u-upload 的话,图片上传功能在电脑上正常,但是在手机的小程序上测试就不会生效&#x…

C# windows服务程序开机自启动exe程序

我们使用传统的Process.Start(".exe")启动进程会遇到无法打开UI界面的问题,尤其是我们需要进行开启自启动程序设置时出现诸多问题,于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序,并且是显式运行。 首先是打开…

19、BLIP-2

简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本,预训练的视觉模型能够提供高质量的视觉表征,预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距,提出了一个分两个阶段预训练的 Qu…

华为端口隔离高级用法经典案例

最终效果: pc4不能ping通pc5,pc5能ping通pc4 pc1不能和pc2、pc3通,但pc2和pc3能互通 vlan batch 2 interface Vlanif1 ip address 10.0.0.254 255.255.255.0 interface Vlanif2 ip address 192.168.2.1 255.255.255.0 interface MEth0/0/1 i…

神经网络:经典模型热门模型

在这里插入代码片【一】目标检测中IOU的相关概念与计算 IoU(Intersection over Union)即交并比,是目标检测任务中一个重要的模块,其是GT bbox与pred bbox交集的面积 / 二者并集的面积。 下面我们用坐标(top&#xff0…

Windows定时重启Tomcat

项目场景: 系统:Windows 7 Tomcat:apache-tomcat-8.0.5 JDK:1.8 问题描述 最近项目的Tomcat隔一段时间就假死,最后想到的解决方式就是:每天凌晨1点重启tomact。 解决方案: 使用Windows系统…

基于SpringBoot的旅游网站

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

MatrixOne 1.1.0 Release

我们非常高兴地宣布: MatrixOne内核1.1.0版本 正式发布啦! 项目文档网站 https://docs.matrixorigin.cn MatrixOne是一款分布式超融合异构数据库,MatrixOne旨在提供一个云原生、高性能、高弹性、高度兼容MySQL的HSTAP数据库,让…

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

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

Cytoscape 3.10安装包下载及安装教程

Cytoscape3.10下载链接:https://docs.qq.com/doc/DUkpuR0RVU0JVWkFP 1、选中下载好的安装包,右键选择解压到“Cytoscape 3.10”文件夹 2、双击打开“Cytoscape_3_10_0_windows_64bit.exe” 3.点击“Download”,请耐心等待“Java”完成 4、点击…

使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c

文章目录 前言一、前期准备1、所需文件2、编译环境 二、创建工程三、解决编译报错四、测试 ffmpeg.c 前言 本文使用官方发布的 SDK 开发包来亲手编译 ffmpeg.c 文件,编译成功后可以对其内部的源码按照我们的需求进行修改,为后面的转码器的开发做个铺垫。…

MySQL四大引擎,数据库管理,数据表管理,数据库账号管理

MySQL四大引擎 InnoDB InnoDB引擎是MySQL默认的存储引擎。它支持事务和行级锁定,并具有高并发性和数据完整性保护的特性。InnoDB适用于具有复杂查询和高并发读写操作的应用程序。MyISAM InnoDB引擎特点和优势 事务支持:InnoDB支持ACID(原子…

搭建宠物寄养小程序流程

近日,一地宠物寄养需求旺盛,元旦满房,春节几近饱和,一窝难求。随着市场需求的增长,对于很多宠物行业的商家,可以考虑开展宠物寄养服务,尤其是节假日的宠物寄养需求会更高。因此,商家…

IoTDB 集群部署——windows

本文的测试环境为window server2016,版本包为1.1.0,jdk版本为1.8 首先下载IoTDB版本包,链接地址如下 https://archive.apache.org/dist/iotdb/1.1.0/apache-iotdb-1.1.0-all-bin.zip 本次部署将使用1个ConfigNode 和3个DataNode模式&#…

计算机网络—网络搭建NAT内外网映射

使用Windows Server 2003 网络拓扑 Router 外网:NAT IP 网段 192.168.17.0/24内网:仅主机模式 IP 172.16.29.4 Client1:仅主机模式 IP 172.16.29.2 网关 172.16.29.1 Client2:仅主机模式 IP 172.16.29.3 网关 172.16.29.1…

Python武器库开发-武器库篇之代理池配置(四十)

武器库篇之代理池配置(四十) 我们在渗透的过程中,是必须要挂代理的,相信为何要挂代理的原因,各位也是非常的明白的,这里就不多讲了。关于如何挂代理和购买代理大家可以去看内网隧道代理技术(十)之公网资产…

【Java】实验三 抽象类与接口

实验名称 实验三 抽象类与接口 实验目的 1. 深刻理解抽象类、接口的意义。 2. 熟练掌握抽象类和接口的定义、继承抽象类以及实现接口的方法。 3. 理解和掌握多态。 实验内容 (一)抽象类实验:项目源码中新建一个ahpu.shape的包&a…

pytest-yaml 测试平台-4.生成allure报告,报告反馈企业微信、钉钉、飞书通知

前言 定时任务执行完成后生成可视化allure报告,并把结果发到企业微信,钉钉,飞书通知群里。 生成allure报告 添加定时任务 执行完成后生成allure报告 查看报告详情 报告会显示详细的request 和 response 详细信息 也可以查看log日志 …

计算机基础面试题 |08.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

图像清晰度评估指标

图像清晰度评估涉及多个指标,这些指标可用于定量测量图像的清晰度和质量。 以下是一些常见的图像清晰度评估指标: 均方根误差(Root Mean Square Error,RMSE): 通过计算原始图像和处理后图像之间的像素差异的…