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

一、图片的四则运算

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时,会改变图像颜色整体的深浅。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023我的编程之旅-地质人的山和水

引言 大家好,我是搞地质的。外行人有的说我们游山玩水,有的说我们灰头土脸,也有的说我们不是科学。 而我说,这是一门穷极一生青春,值得奉献的行业。这是一门贴近民生,又拥抱自然的学科。他的真理性在于探…

excel 插件:Rainbow Analyst Crack

一个插件中包含四种 EXCEL 审核工具检测并修复隐藏的电子表格错误 不要满足于更少,四种领先的电子表格审计工具合二为一 Rainbow Analyst(因其对颜色编码的独特强大使用而得名)结合了世界级电子表格审核功能的多个领域: Excel™ …

【Spring实战】14 Web表单校验

文章目录 1. 依赖2. 实体类3. 控制器4. 页面5. 启动6. 验证1)访问页面2)后台校验 7. 优点8. 代码详细总结 在 Web 应用中,表单是用户与后端交互的主要界面之一。为了确保数据的有效性和一致性,我们经常需要对提交的表单数据进行验…

一文教会git如何配置多SSH Key(Github+Gitlab)

一文教会git如何配置多SSH Key(GithubGitlab) 对于工作了的伙伴来说,大家经常会配置多个SSH Key: SSH拉取的仓库不会反复的要求输入github用户名密码来验证自己的身份需要将公司的Gitlab和个人的Github区分开 我这里以Mac电脑为例…

Debezium发布历史46

原文地址: https://debezium.io/blog/2019/02/05/debezium-0-9-0-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 0.9.0.Final 发布 2019 年 2 月 5 日 作者: G…

matplotlib颜色合集——各种常见简单图形(上)

一、.颜色配图表 图文颜色引用:建站教程 - FINTHON 二、折线图 jupyter notebook 简介plot() 2.1折线图参数 plt.plot(*args, scalexTrue, scaleyTrue, dataNone, **kwargs) 2.2、参数介绍 x:X轴数据,列表或数组,可选。 y&a…

没有Kubernetes也可以玩转Dapr?

一、NameResolution组件 虽然Dapr提供了一系列的编程模型,比如服务调用、发布订阅和Actor模型等,被广泛应用的应该还是服务调用。我们知道微服务环境下的服务调用需要解决服务注册与发现、负载均衡、弹性伸缩等问题,其实Dapr在这方面什么都没…

【数据结构】二叉树(一)——树和二叉树的概念及结构

前言: 本篇博客主要了解什么是树,什么是二叉树,以及他们的概念和结构。 文章目录 一、树的概念及结构1.1 树的基本概念1.2 树的相关特征1.3 树的实现 二、二叉树的概念及性质2.1 二叉树的概念2.2 二叉树的性质 一、树的概念及结构 1.1 树的基本概念 树&…

Z-score 因子的深入思考

最新(2024 年 1 月)出版的 SC 技术分析(Techical Analysis of Stock & Commodities)的第 4 条文章给到了 Z-score,原文标题为《Z-score: How to use it in Trading》。今天的笔记,就借此机会&#xff0…

C++线程池的原理(画图)及简单实现+例子(加深理解)

1.为什么线程池会出现,解决什么问题? C线程池(ThreadPool)的出现主要是为了解决以下几个问题: 1.性能:创建和销毁线程都是相对昂贵的操作,特别是在高并发场景下,频繁地创建和销毁线…

ubuntu18.04安装MySQL

1.安装mysql服务器端 sudo apt-get -y install mysql-server(18.04/20.04不会提示输入密码,默认是没有密码) 2.安装mysql客户端 sudo apt-get -y install mysql-client3.安装mysql模块 sudo apt-get -y install libmysqlclient-dev4.验证是…

data.TensorDataset解析

data.TensorDataset 是 PyTorch 中的一个类,用于创建一个包含多个张量的数据集。这个类的主要作用是将输入的张量组合成一个数据集,使得在训练过程中可以方便地进行数据加载和迭代。 具体来说,TensorDataset 接受一系列的张量作为输入参数&a…

字符集字符编码

字符集 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。而字符集(Character set)则是多个字符的集合。 简单的说,字符集就规定了某个文字对应的二进制数字存放方式…

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务,保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…

[C#]yolov8-onnx在winform部署手势识别模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

Java的并发修改异常

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

原生JS调用OpenAI GPT接口并实现ChatGPT逐字输出效果

效果&#xff1a; 猜你感兴趣&#xff1a;springbootvue实现ChatGPT逐字输出打字效果 附源码&#xff0c;也是小弟原创&#xff0c;感谢支持&#xff01; 没废话&#xff0c;上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…

【Proteus仿真】【STM32单片机】超声波测距系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用动态数码管、按键、HCSR04超声波、蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管显示超声波检测距离&#xff0c;当检测…

奈奎斯特定理

奈奎斯特定理是通信领域中重要的理论基础之一&#xff0c;它对于数字通信系统中的信号采样和重构具有至关重要的作用。在数字信号处理和通信技术中&#xff0c;奈奎斯特定理的应用不仅具有理论意义&#xff0c;还对通信系统的设计、优化和性能提升起着重要的指导作用。本文将以…