当前位置: 首页 > news >正文

03 OpenCV图像运算

文章目录

  • 1 普通加法
    • 1 加号相加
    • 2 add函数
  • 2 加权相加
  • 3 按位运算
    • 1 按位与运算
    • 2 按位或运算、非运算
  • 4 掩膜

1 普通加法

1 加号相加

在 OpenCV 中,图像加法可以使用加号运算符(+)来实现。例如,如果要将两幅图像相加,可以使用以下代码:

import cv2img1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")dst = img1 + img2cv2.imshow("Result", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用+相加的计算原理是:
y(x)={a+b,a+b≤255(a+b)%256,a+b>255\begin{equation} y(x)=\left\{ \begin{aligned} a+b, \quad a+b\leq255\\ (a+b)\%256, \quad a+b>255\\ \end{aligned} \right . \end{equation} y(x)={a+b,a+b255(a+b)%256,a+b>255
即当两份图像相加之后超过上限时,其值为除以256之后的余数。(注意与add函数的计算原理区分)

2 add函数

函数cv2.add()可以用来计算图像像素值相加的和,其语法格式为:

计算结果=cv2.add(像素值a,像素值b)

使用add相加的计算原理是:
y(x)={a+b,a+b≤255255,a+b>255\begin{equation} y(x)=\left\{ \begin{aligned} a+b, \quad a+b\leq255\\ 255, \quad a+b>255\\ \end{aligned} \right . \end{equation} y(x)={a+b,a+b255255,a+b>255

通过对比可以看出两个方式的差异

import cv2  a = cv2.imread("lenacolor.png", 0)  
b = a  
result1 = a + b  
result2 = cv2.add(a, b)  
cv2.imshow("original", a)  
cv2.imshow("+", result1)  
cv2.imshow("add", result2)  
cv2.waitKey()  
cv2.destroyAllWindows()

image.png

除了两个图像相加之外,图像还可以直接与数字相加:
img1=∣111222333∣img1 = \left| \begin{array}{} 1 & 1 & 1 \\ 2 & 2 & 2\\ 3 & 3 & 3 \end{array} \right| img1=123123123
执行img2=cv2.add(img1,3)运算后,可得到:img2=∣444555666∣img2 = \left| \begin{array}{} 4 & 4 & 4 \\ 5 & 5 & 5\\ 6 & 6 & 6 \end{array} \right| img2=456456456

2 加权相加

cv2.addWeighted() 函数是 OpenCV 中的图像加权混合函数。该函数可以将两幅图像按照给定的比例进行混合,得到新的图像。
加权相加的计算方法为:result=acr1×alpha+acr2×beta+gammaresult = acr1×alpha + acr2×beta + gammaresult=acr1×alpha+acr2×beta+gamma
该函数的语法格式如下:

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst

参数说明:

  • src1:第一幅图像。
  • alpha:第一幅图像的比例系数。
  • src2:第二幅图像。
  • beta:第二幅图像的比例系数。
  • gamma:结果图像的亮度调节,不调节则填0,但不可省略。
  • dst:结果图像。
  • dtype:结果图像的数据类型。

3 按位运算

1 按位与运算

OpenCV 中的按位与运算的计算原理是二进制位的位与运算。
在计算机中,图像的像素是以二进制位的形式存储的,因此按位与运算就是对两个图像的对应像素的二进制位进行“与”运算。
按位与运算的结果取决于两个数的二进制位上的值,如果两个二进制位都是 111,则结果为 111,否则结果为 000
例如,如果 A=10A=10A=10(二进制为 101010101010),B=6B=6B=6(二进制为 011001100110),则 Aand B=2A \ \text{and} \ B = 2A and B=2(二进制为 001000100010)。
在 OpenCV 中,按位与运算可以应用于图像的二值化、边缘检测、形状分析等。通过按位与运算,可以将图像的某些部分提取出来,从而获得更多有用的信息。
通过这一特性,可以实现图片的按掩膜提取功能。

import cv2  
import numpy as np  a = cv2.imread("lenacolor.png", 0)  
b = np.zeros(a.shape, dtype=np.uint8)  
b[100:400, 200:400] = 255  
c = cv2.bitwise_and(a, b)  
cv2.imshow("a", a)  
cv2.imshow("b", b)  
cv2.imshow("c", c)  
cv2.waitKey()  
cv2.destroyAllWindows()

image.png

2 按位或运算、非运算

OpenCV 中的按位或运算(Bitwise Or)和非运算(Bitwise Not)是对图像中的每一个像素进行二进制位上的运算。

  • 按位或运算:按位或运算的结果取决于两个数的二进制位上的值,如果两个二进制位中至少有一个是 111,则结果为 111,否则结果为 000
  • 非运算:非运算是对图像中每一个像素的二进制位取反,如果原来是 000,则结果为 111;如果原来是 111,则结果为 000

在 OpenCV 中,可以使用 cv2.bitwise_or()cv2.bitwise_not() 函数来实现按位或运算和非运算,其使用方法同与运算。

4 掩膜

除了在按位与运算中执行掩膜操作外,在使用add函数时也可以通过mask信息。

import cv2
import numpy as npimg1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")mask = np.zeros(img1.shape[:2], dtype=np.uint8)
cv2.rectangle(mask, (100, 100), (200, 200), (255, 255, 255), -1)dst = cv2.add(img1, img2, mask=mask)cv2.imshow("Result", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,首先创建了一个全黑的掩膜,然后使用 cv2.rectangle() 函数在掩膜上绘制了一个白色的矩形,该矩形代表了加法运算只需要应用到图像的一部分。
最后,在调用 cv2.add() 函数时,将掩膜作为参数传入,从而只对图像的矩形区域进行加法运算。

相关文章:

03 OpenCV图像运算

文章目录1 普通加法1 加号相加2 add函数2 加权相加3 按位运算1 按位与运算2 按位或运算、非运算4 掩膜1 普通加法 1 加号相加 在 OpenCV 中,图像加法可以使用加号运算符()来实现。例如,如果要将两幅图像相加,可以使用…...

【C语言学习笔记】:动态库

一、动态库 通过之前静态库那篇文章的介绍。发现静态库更容易使用和理解,也达到了代码复用的目的,那为什么还需要动态库呢? 1、为什么还需要动态库? 为什么需要动态库,其实也是静态库的特点导致。 ▶ 空间浪费是静…...

Zookeeper

zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制,防止出现脏读,例如我们常说的分布式锁。 zookeeper中的数据是存储在内存当中的,因此它的效率十分高效。它内部的存储方式十分类似于文件存储…...

wav转mp3,wav转换成mp3教程

很多使用音频文件的小伙伴,总会接触到不同类型的音频格式,根据需求不同需要做相关的处理。比如有人接触到了wav格式的音频,这是windows系统研发的一种标准数字音频文件,是一种占用磁盘体积超级大的音频格式,通常用于录…...

springboot项目配置文件加密

1背景: springboot项目中要求不能采用明文密码,故采用配置文件加密. 目前采用有密码的有redis nacos rabbitmq mysql 这些配置文件 2技术 2.1 redis nacos rabbitmq 配置文件加密 采用加密方式是jasypt 加密 2.1.1 加密步骤 2.1.2 引入maven依赖 …...

公司招聘:33岁以上的和两年一跳的不要,开出工资我还以为看错了...

导读:对于公司来说,肯定是希望花最少的钱招到最优秀的员工,但事实上这个想法是不太现实的,虽然如今互联网不太好找工作,但要员工降薪去入职,相信还是有很大难度的,很多人宁可在家休息&#xff0…...

【置顶】:文章合集系列

【置顶】:文章合集系列 必看 文章中的所有内容仅供做个人学习使用,所有环境都在本地搭建并验证,任何人使用文中方法进行未经授权的渗透行为都与文章与我本人无关,请各位大佬不要进行未经授权的渗透行为…… 前言 之前更新过一段…...

Go的web开发Gin框架1(八)——Gin

一、重点内容: 知识要点有哪些? 1、了解Gin框架 2、导入使用Gin框架 3、尝试配合GORM开发 4、整合html,css,js 二、详细知识点介绍: 1、Gin框架介绍 ​ Gin是一个golang的微框架,封装比较优雅&…...

吴思进——复杂美创始人首席执行官

杭州复杂美科技有限公司创始人兼CEO, 本科毕业于浙江大学机械专业,辅修过多门管理课程;1997年获经济学硕士学位,有关对冲基金的毕业论文被评为优秀;2008年创办杭州复杂美科技有限公司。 吴思进 中国电子学会区块链委员会专家&…...

apk简单介绍(组成以及打包安装流程)

apk简单介绍APK 的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程了解打包流程能做什么操作APK 的组成 APK 其实是一个 zip 类型的压缩包,而一个典型的 APK 通常都会包…...

ffmpeg学习笔记之SDL视频播放器

看了雷神的 100行代码实现最简单的基于FFMPEGSDL的视频播放器&#xff08;SDL1.x&#xff09; 后手痒难耐&#xff0c;决定将里面的代码重新建一个 首先建立一个空项目&#xff0c;新建一个Mysimplest.cpp的文件。在里面写代码 #include <stdio.h>extern "C" …...

【Git】合并多条 commit 注释信息

文章目录1、查看 commit 记录2、合并 commit 注释1、查看 commit 记录 # 3 指的是查看最近 3 次的 commit 记录&#xff0c;如果要查看多次的可以修改数字 # -3 不加&#xff0c;则表示查看所有 commit 记录&#xff0c;一般还是用数字去指定 git log -32、合并 commit 注释 …...

【gcc/g++】程序的翻译(.c -->.exe)

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;前言我们在写完代码运行时会发现生成了一个.exe的可执行程序&#xff0c;那么该程序是如何形成的呢&#xff1f;本次章节将在linux下用编译器gcc进行一…...

电话号码的字母组合-力扣17-java

一、题目描述给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。示例 1&#xff1a;输入&#xff1a;digits "23"输出…...

Archery-SQL审核查询平台

Archery-SQL审核查询平台 文章目录Archery-SQL审核查询平台一、功能列表介绍1.1、SQL审核MySQL实例非MySQL实例审核执行分离SQL工单自动审批、高危语句驳回快速上线其他实例定时执行1.2、SQL查询多类型数据库支持授权管理页面体验1.3、SQL优化慢日志管理SQL语句优化1.4、实例管…...

MySQL8.0安装教程

文章目录1.官网下载MySQL2.下载完记住解压的地址&#xff08;一会用到&#xff09;3.进入刚刚解压的文件夹下&#xff0c;创建data和my.ini在根目录下创建一个txt文件&#xff0c;名字叫my&#xff0c;文件后缀为ini&#xff0c;之后复制下面这个代码放在my.ini文件下&#xff…...

一文详解工业知识模型互联平台MoHub

1月8日&#xff0c;MWORKS 2023产品发布会落下帷幕。会上&#xff0c;同元软控隆重推出了云原生的工业知识模型互联平台MoHub&#xff0c;引起广泛关注。本文将从服务定位、架构方案、核心服务、持续运营等方面对MoHub平台进行全面介绍。1 MoHub平台的服务定位装备数字化的必要…...

MySQL入门篇-MySQL表连接小结

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的表连接的方法 测试数据: create table t1(id int); create table t2(id int);insert into t1 values(1); insert into t1 values(2);insert into t2 values(2); insert into t2 values(3); commit;内连接 --求交集 …...

使用纹理(Textures)

当物体表面并非是纯色的时候&#xff0c;比如带波点&#xff0c;斑纹或者表面有刮痕或被裂纹等&#xff0c;这些效果该如何实现呢&#xff1f; 这里我们需要提到一个概念是贴图&#xff08;Maps&#xff09;。Maps是覆盖在游戏物体上的2D图片&#xff0c;用来设置表面的颜色、s…...

android 11 添加开机铃声

需求&#xff1a;在11.0在定制化系统中&#xff0c;默认是没有开机铃声的&#xff0c;有客户提出需要要添加开机铃声&#xff0c;所以为了完成需求&#xff0c;就来实现这一个功能关于开机铃声 都是在bootanimation_main.cpp 这里面负责管理。添加添加开机铃声的核心类framewor…...

操作系统考试突击复习笔记

0 基础概念补充特权命令&#xff1a;有特殊权限的指令&#xff0c;比如清内存、置时钟、分配系统资源、修改虚拟内存的段表和页表&#xff0c;修改用户的访问权限。系统调用&#xff1a;操作系统为应用程序提供的使用接口&#xff0c;可以理解为一种可供应用程序调用的特殊函数…...

java8函数式接口分布式事务简单实现方式

import java.util.List; import java.util.function.Function;/*** @ClassName TransactionFunctionDTO* @Description* @Author SD.LIU* @Date 2023/2/13 22:41* @Version 1.0**/ public class TransactionFunctionDTO...

最后一个单词的长度-力扣58-java

一、题目描述给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1&#xff1a;输入&#xff1a;s "Hello World"输出&#x…...

Java开发学习(四十九)----MyBatisPlus更新语句之乐观锁

1、概念 在讲解乐观锁之前&#xff0c;我们还是先来分析下问题: 业务并发现象带来的问题:秒杀 假如有100个商品或者票在出售&#xff0c;为了能保证每个商品或者票只能被一个人购买&#xff0c;如何保证不会出现超买或者重复卖 对于这一类问题&#xff0c;其实有很多的解决方…...

力扣SQL刷题11

目录标题1194. 锦标赛优胜者--做出来了1225. 报告系统状态的连续日期-勉强1159. 市场分析 II1205. 每月交易II1194. 锦标赛优胜者–做出来了 题型&#xff1a;看题 解答&#xff1a;先处理matches表&#xff0c;整出分数列和players表连接 注意点&#xff1a; union all 时…...

Fluent Python 笔记 第 9 章 符合 Python 风格的对象

得益于 Python 数据模型&#xff0c;自定义类型的行为可以像内置类型那样自然。实现如此自然的行为&#xff0c;靠的不是继承&#xff0c;而是鸭子类型(duck typing)&#xff1a;我们只需按照预定行为实现对象所需的方法即可。 9.1 对象表示形式 实现 __repr__ 和 __str__ 特…...

档案管理数字化,成功的领导者,往往只问这3个问题

随着数字经济时代的到来&#xff0c;信息技术的更迭演进&#xff0c;逐渐改变了企业的办公业务流程&#xff0c;传统的办公业务模式已不能满足当前的企业业务需求。数字化转型成为当下企业的必选项。随着公司部门架构的日益复杂&#xff0c;流程繁多&#xff0c;产生海量的企业…...

自学软件测试从哪里开始?给还在迷茫的人一条出路

这两天和朋友谈到软件测试的发展&#xff0c;其实软件测试已经在不知不觉中发生了非常大的改变&#xff0c;前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;目前软件测试行业“缺口”已经基本饱和。当然&a…...

配置MyBatis Plus 的分页查询功能

配置MyBatis Plus 的分页查询功能一. 回顾Mysql分页查询二. 配置MyBatis Plus 分页功能2.1 定义分页拦截器2.2 进行分页查询 selectPage()三. 开启MyBatis Plus的运行日志一. 回顾Mysql分页查询 limit 是MySQL当中特有的&#xff01;其他数据库没有&#xff01;不通用&#xf…...

Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)

插件热插拔管理机制&#xff0c;简称&#xff1a;H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi&#xff0c;H-Spi 更侧重隔离、热插热拔、及管理性。 应用时&#xff0c;是以一个业务模块为单位进行开发&#xff0c;且封装为一个独立插件包。 1、特点说明 所…...

公关策划网站建设/河南seo和网络推广

接收中文乱码 EntityUtils.toString(entity,"UTF-8"); 请求中文乱码 StringEntity s new StringEntity(json.toString());s.setContentEncoding("UTF-8");...

厦门网站建设哪家不错/排名优化工具

Linux操作系统知识 1. Linux开机启动流程详细步骤是什么&#xff1f;忘记密码如何破解&#xff1f; 2. 企业中Linux数据库服务器做raid几&#xff0c;你们原来公司的数据库服务器大小&#xff1f;RAID 0 1 5 10区别&#xff0c;系统分区标准是什么&#xff1f; 3. 某一天突然…...

怎么做万网网站/网络营销和网络推广有什么区别

Kogge-Stone 树形加法器1. Kogge-Stone2. 超前进位加法器3. Koggle-Stone 并行算法4. 树形结构5. 16位加法器实现6. 参考资料1. Kogge-Stone Kogge-Stone 加法器是利用 Peter M. Kogge 和 Harold S.Stone 于 1972 年提出的一 种并行算法生成的一种树形加法器。此种加法器在树形…...

网站建设审核需要多长时间/seo学校培训

19.闭包是什么&#xff1f;有什么特性&#xff1f;请简单书写一个简单事例&#xff1f; 必包&#xff1a;闭包是指可以包含自由&#xff08;未绑定到特定对象&#xff09;变量的代码块&#xff1b;这些变量不是在这个代码块内或者任何全局上下文中定义的&#xff0c;而是在定义…...

辣条类网站建设规划书/手机关键词seo排名优化

本文主要记录下自己在react道路上的爬坑过程 以及对于刚学习redux的同学提供一些可供参考的例子。 之前用vue用了很久 vue的语法糖用起来是真的舒服 不过现在公司项目用的是react 只好默默的从vue转到react 其实毕竟他们都是类似的框架&#xff0c; 虽然语法大不同&#xff0c;…...

高清有线电视沈阳/专业的seo搜索引擎优化培训

在之前的一篇文章《PE文件格式的一些研究 》我简单谈了PE文件格式的基本机构。在文章的最后我提到由于C的命名空间和虚函数的影响&#xff0c;编译器对C库的导出函数进行了名称修饰。 今晚简单研究了一下如何把这个名称修饰去掉&#xff0c;还原函数的真实名称。对于VC编译器编…...