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…

关于深入实施“东数西算”工程加快构建全国一体化算力网的实施意见研读

国家发展改革委在2023.12.25号发布了关于深入实施“东数西算”工程加快构建全国一体化算力网的实施意见&#xff0c; 开头指出了意见的核心目标&#xff1a; “算力是数字经济时代的新型生产力。算力网是支撑数字经济高质量发展的关键基础设施&#xff0c;可通过网络连接多源…

Mybaits-plus快速入门

Mybaits-plus快速入门 mybaits-plus约定 • 默认以类名驼峰转下划线作为表名 • 默认把名为 id 的字段作为主键 • 默认把变量名驼峰转下划线作为表的字段名 第一步导入pom依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis…

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

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

hash基础知识(算法村第五关青铜挑战)

一、Hash的概念和基本特征 哈希(Hash)也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#xff0c;这个输出值就是散列值。 二、碰撞处理方法(2种) 在上面的例子中&#xff0c;我们发现有些在Hsh中很多位置可能要存两个甚…

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; 蓝桥云课签约作者、已在蓝桥云…

序言:《未来已来》

尊敬的读者&#xff0c; 你是否曾经在面对冗长的报告、繁琐的工作、沉重的生活压力时感到困扰&#xff0c;渴望找到一种方式来提升效率&#xff0c;释放压力&#xff1f;你是否曾经在自我创业的道路上&#xff0c;苦于找不到有效的市场营销方式&#xff0c;寻求突破&#xff1f…

【论文精读】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…

开发一个商城小程序要多少钱?

随着科技的飞速发展&#xff0c;小程序已成为移动端购物的新宠。商城小程序更是如此&#xff0c;凭借其便捷性、灵活性、以及强大的营销功能&#xff0c;为企业打开了新的销售渠道。那么&#xff0c;开发一个商城小程序到底要多少钱呢&#xff1f;今天&#xff0c;我们就来深入…

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

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

玩转Ubuntu零基础教程

欢迎来到 Ubuntu&#xff01;以下是一份零基础入门 Ubuntu 的指南&#xff0c;以帮助你更好地了解和使用这个流行的 Linux 操作系统。 1. 安装 Ubuntu&#xff1a; 从 Ubuntu 官网 下载最新版本的 Ubuntu。制作启动盘&#xff08;可以使用软件如 Rufus 或 balenaEtcher&#…

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…

【QT】发生的运行时错误汇总

1 、QObject::startTimer: Timers cannot be started from another thread 错误原因&#xff1a;QObject是可重入的&#xff0c;它的大多数非GUI子类&#xff0c;例如QTimer, QTcpSocket, QUdpSocket and QProcess都是可重入的&#xff0c;使得这些类可以同时用于多线程。需要…