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

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算
1.1 图像的加法运算
1.2 图像的减法运算
1.3 图像的融合
2 OpenCV的位运算
2.1 非操作
2.2 与运算
2.3 或和异或

1 图像的算术运算

1.1 图像的加法运算

  • add opencv使用add来执行图像的加法运算

图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的.

# 图片加法
import cv2cat = cv2.imread('./cat.jpeg')
dog = cv2.imread('./dog.jpeg')# 加法要求两个图片大小一致
print(cat.shape)
print(dog.shape)
# 把猫的图片变小
# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.
new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
# 和单个数字运算, 超过255 会被截断, 相当于 % 256
print(new_cat[0:5, 0:5])
print(new_cat[0:5, 0:5] + 100) 
cv2.imshow('cat_dog', np.hstack((new_cat, dog)))
# 加法, 加法的效果是加起来如果超过255, 统一变成255
new_img = cv2.add(new_cat, dog)
print(new_img[0:5, 0:5])
cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)
cv2.destroyAllWindows()

请添加图片描述

1.2 图像的减法运算

  • subtract

  • opencv使用subtract来执行图像的减法运算, 图像对应位置的元素相减, 如果减完小于0, 统一变成0.

  # 图片减法import cv2cat = cv2.imread('./cat.jpeg')dog = cv2.imread('./dog.jpeg')# 加法要求两个图片大小一致print(cat.shape)print(dog.shape)# 把猫的图片变小# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))# 减法new_img = cv2.subtract(new_cat, dog)print(new_cat[0:5, 0:5], dog[0:5, 0:5])print(new_img[0:5, 0:5])cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)cv2.destroyAllWindows()

请添加图片描述

  • 同样的还有乘法, 除法运算. cv2.mutiply, cv2.divide, 原理是类似的.

1.3 图像的融合

  • cv2.addWeighted(src1, alpha, src2, beta, gamma)

  • 图片的融合操作相当于对图片进行线性运算 w1* x1 + w2 * x2 + b. 其中alpha是第一个权重参数, beta是第二个权重参数, gamma是偏差.

    import cv2cat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
    # 相当于res = new_cat * 0.4 + dog * 0.6 + 0
    res = cv2.addWeighted(new_cat, 0.4, dog, 0.6, 0)cv2.imshow('cat_dog', np.hstack((new_cat, dog, res)))cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2 OpenCV的位运算

2.1 非操作

  • bitwise_not(img) 非操作的效果就相当于是用 255 - img

    import cv2
    import numpy as npcat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')cat_not = cv2.bitwise_not(cat)
    cat_not_not = cv2.bitwise_not(cat_not)
    cv2.imshow('not', np.hstack((cat, cat_not, cat_not_not)))
    print(cat[:3, :3])
    print(cat_not[:3, :3])
    print(cat_not_not[:3, :3]cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2.2 与运算

  • bitwise_and(img1, img2) 与运算, 图片对应位置元素进行与操作. 表现出来的效果就是黑和黑与还是黑, 白和白与还是白.

    import cv2
    import numpy as npcat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
    cat_and_dog = cv2.bitwise_and(new_cat, dog)
    cv2.imshow('not', np.hstack((new_cat, cat_and_dog)))
    print('cat:', new_cat[:3, :3])
    print('-----------')
    print('dog:', dog[:3, :3])
    print('-----------')
    print(cat_and_dog[:3, :3])cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2.3 或和异或

  • bitwise_or 或运算 对应元素做或运算

  • bitwise_xor 异或运算 对应元素做异或运算

    import cv2
    import numpy as np#创建一张图片
    img = np.zeros((200,200), np.uint8)
    img2 = np.zeros((200,200), np.uint8)img[20:120, 20:120] = 255
    img2[80:180, 80:180] = 255#new_img = cv2.bitwise_bit(img)
    #new_img = cv2.bitwise_and(img, img2)
    #new_img = cv2.bitwise_or(img, img2)
    new_img = cv2.bitwise_xor(img, img2)cv2.imshow('new_img', new_img)
    cv2.imshow('img', img)
    cv2.imshow('img2', img2)
    cv2.waitKey(0)

    请添加图片描述

相关文章:

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加…...

ChatGPT 3.5/4.0使用手册:解锁人工智能的无限潜能

1. 引言 在人工智能的浪潮中,ChatGPT以其卓越的语言理解和生成能力,成为了一个革命性的工具。它不仅仅是一个聊天机器人,更是一个能够协助我们日常工作、学习和创造的智能伙伴。随着ChatGPT 3.5和4.0版本的推出,其功能和应用范围…...

E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

1.题目 【问题描述】 “懒羊羊”字符串是一种特定类型的字符串,它由三个字符组成,具有以下特点: 1.字符串长度为 3. 2.包含两种不同的字母。 3.第二个字符和第三个字符相同 换句话说,“懒羊羊”字符串的形式应为 ABB,其中A和B是不…...

Linux 网络基础概念

文章目录 一、初始协议1、理解2、协议分层3、软件分层4、OSI七层模型5、TCP/IP五层模型 二、再识协议1、为什么要有TCP/IP协议2、什么是TCP/IP协议3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的) 三、网络传输基本流程1、mac地址2、TCP/I…...

【题目】MySQL选择题

来源:MySQL专项练习选择题 1.有一个User用户表,要删除整张表(指完全删除表数据和结构),下面正确的MySQL语句是: A.DELETE TABLE User; B.DROP TABLE User; C.TRUNCATE TABLE User; D.DELETE FROM User …...

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算…...

亚马逊IP关联及其解决方案

在电子商务领域,亚马逊作为全球领先的在线购物平台,吸引了众多商家和个人的参与。然而,随着业务规模的扩大,商家在使用亚马逊服务时可能会遇到IP关联的问题,这不仅影响账户的正常运营,还可能带来一系列不利…...

Definition and Detection of Defects in NFT Smart Contracts论文解读、复现

背景知识\定义 NFT 是数字或物理资产所有权的区块链表示。不仅限于数字图片,视频和画作等艺术品也可以转化为 NFT 进行交易。近年来受到广泛关注,2021 年 NFT 交易额达到约 410 亿美元。 智能合约 是在区块链上运行的图灵完备程序。支持各种去中心化…...

Neo4j图数据库

文章目录 一、Neo4J相关介绍1.为什么需要图数据库方案1:Google方案2:Facebook 2.特定和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 二、CQL语句1.CQL简介2.CREATE 命令3.MATCH 命令4.RETURN 子句5.MATCH和RETURN6.C…...

k8s API资源对象

API资源对象Deployment 最小的资源是pod,deployment是多个pod的集合(多个副本实现高可用、负载均衡等)。 使用yaml文件来配置、部署资源对象。 Deployment YAML示例: vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment…...

GB/T28181规范解读之编码规则详解

GB/T28181,即《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是我国安防行业的重要标准之一。该标准详细规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结构,以及传输、交换、控制的基本要求和安全性要求…...

Vue封装的过度与动画(transition-group、animate.css)

目录 1. Vue封装的过度与动画1.1 动画效果11.2 动态效果21.3 使用第三方动画库animate.css 1. Vue封装的过度与动画 作用:在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名 1.1 动画效果1 Test1.vue: transition内部只能包含一个子标签。…...

免费云服务器申请教程

免费云服务器的申请流程通常包括以下几个步骤,但请注意,不同云服务提供商的具体步骤可能略有不同。以下是一个通用的申请流程: 一、选择合适的云服务提供商 首先,需要选择一家提供免费云服务器服务的云服务提供商。 免费云服务器汇…...

Spring Cloud Gateway中的常见配置

问题 最近用到了Spring Cloud Gateway,这里记录一下这个服务的常见配置。 spring:data:redis:host: ${REDIS_HOST:xxx.xxx.xxx.xxx}port: ${REDIS_PORT:2345wsd}password: ${REDIS_PASS:sdfsdfgh}database: ${REDIS_DB:8}session:redis:flush-mode: on_savenamespa…...

SelectDB 多计算集群核心设计要点揭秘与场景应用

需求起源 SelectDB 设计多计算集群架构初衷主要源于两类典型的使用场景: 写入与读取隔离:传统数仓架构中,数据的写入和读取在同一个计算集群,当遇到业务写入高峰期或突增的写入压力时,容易因资源相互抢占影响查询服务…...

Docker 清理和查看镜像与容器占用情况

查看容器占用磁盘大小 docker system df 查看单个image、container大小: docker system df -v 清理所有废弃镜像与Build Cache docker system prune -a...

如何在Android 12 aosp系统源码中添加三指下滑截图功能

如何在Android 12 aosp系统源码中添加三指下滑截图功能 系统中截图api非常简单: private static ScreenshotHelper sScreenshotHelper;sScreenshotHelper new ScreenshotHelper(mContext);//调用 sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHO…...

使用SQL语句查询MySQL数据表

6.1 创建单表基本查询 1&#xff0e;Select 语句的语法格式及其功能 &#xff08;1&#xff09;Select 语句的一般格式。 Select < 字段名称或表达式列表 > From < 数据表名称或视图名称 > [ Where < 条件表达式 > ] [ Group By < 分组的字段名称…...

【AI绘画、换脸、写作、办公】从零开始:使用AIStarter启动器发布AI应用

随着人工智能技术的快速发展&#xff0c;越来越多的开发者希望通过自己的创意来构建和分享AI应用。AIStarter启动器正是为此而设计的一个强大工具&#xff0c;它可以帮助开发者轻松打包并发布自己的AI应用项目。本文将详细介绍如何使用AIStarter启动器来实现这一目标。 注册账…...

eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】

存储器的简单介绍 ROM&#xff08;只读存储器&#xff09;、RAM&#xff08;随机存取存储器&#xff09;、Flash&#xff08;闪存&#xff09;、和EEPROM&#xff08;电可擦可编程只读存储器&#xff09;是四种不同类型的存储介质。ROM用于存储固件或永久数据&#xff0c;不易…...

告别AI人像翻车!MusePublic艺术创作引擎保姆级入门教程

告别AI人像翻车&#xff01;MusePublic艺术创作引擎保姆级入门教程 &#x1f3db; MusePublic 艺术创作引擎是一款专为艺术感时尚人像创作设计的轻量化文本生成图像系统&#xff0c;基于MusePublic专属大模型&#xff0c;采用safetensors安全格式封装&#xff0c;深度优化优雅…...

LightOnOCR-2-1B GPU优化实践:vLLM推理引擎配置与显存占用压测报告

LightOnOCR-2-1B GPU优化实践&#xff1a;vLLM推理引擎配置与显存占用压测报告 你是不是也遇到过这样的烦恼&#xff1f;部署一个OCR模型&#xff0c;明明看着参数不大&#xff0c;但一跑起来&#xff0c;显存就蹭蹭往上涨&#xff0c;甚至直接爆掉。或者&#xff0c;服务启动…...

如何监控模型性能?HY-MT1.5-1.8B Prometheus集成

如何监控模型性能&#xff1f;HY-MT1.5-1.8B Prometheus集成 在实际部署AI模型服务时&#xff0c;仅仅让模型运行起来是远远不够的。如何实时了解模型的服务状态、性能表现和资源使用情况&#xff0c;才是确保服务稳定可靠的关键。今天我们就来探讨如何使用Prometheus监控部署…...

Qwen3-0.6B-FP8部署与Git工作流结合:AI代码审查助手

Qwen3-0.6B-FP8部署与Git工作流结合&#xff1a;AI代码审查助手 你有没有遇到过这种情况&#xff1f;团队里新来的小伙伴提交了一段代码&#xff0c;语法上挑不出大毛病&#xff0c;但总觉得逻辑有点绕&#xff0c;或者命名风格不太统一。你作为资深开发&#xff0c;想提点建议…...

Vivado GUI隐藏技巧:如何手动修改OOC模式IP的时钟频率(附200MHz实战案例)

Vivado GUI隐藏技巧&#xff1a;如何手动修改OOC模式IP的时钟频率&#xff08;附200MHz实战案例&#xff09; 在FPGA开发中&#xff0c;Vivado的IP核(IP Catalog)功能极大提升了设计效率&#xff0c;但OOC(Out-of-Context)模式下IP核的时钟频率设置却常常让初学者困惑。当你在G…...

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置:二分查找实战

刷题路上&#xff0c;二分查找是绕不开的经典算法&#xff0c;而LeetCode 34题「在排序数组中查找元素的第一个和最后一个位置」&#xff0c;正是二分查找的进阶应用——它不仅要求我们找到目标值&#xff0c;更要精准定位其在非递减数组中的起始和结束位置&#xff0c;同时还要…...

木马与恶意软件深度实战:查杀原理 + 免杀对抗全攻略(2026 珍藏版)

木马与恶意软件深度实战&#xff1a;查杀原理 免杀对抗全攻略&#xff08;2026 珍藏版&#xff09; 在网络安全的攻防对抗中&#xff0c;木马&#xff08;Trojan Horse&#xff09; 是最经典、最具代表性的恶意软件之一。它以 “伪装欺骗” 为核心手段&#xff0c;以 “远程控…...

告别繁琐配置:用快马ai一键生成跨平台vscode python开发环境

最近在帮团队新成员配置Python开发环境时&#xff0c;发现虽然VSCode很强大&#xff0c;但初始配置过程对新手来说还是有点复杂。不同操作系统下的路径处理、工具链选择、调试配置这些细节&#xff0c;经常要反复调试才能跑通。后来尝试用InsCode(快马)平台的AI辅助功能&#x…...

3步实现路由器固件自动更新:从繁琐到智能的运维升级指南

3步实现路由器固件自动更新&#xff1a;从繁琐到智能的运维升级指南 【免费下载链接】immortalwrt An opensource OpenWrt variant for mainland China users. 项目地址: https://gitcode.com/GitHub_Trending/im/immortalwrt 一、痛点分析&#xff1a;为什么手动更新让…...

技术经理必修管理知识:从管理到领导——高阶技术管理者的自我修养

08-技术经理必修管理知识&#xff1a;从管理到领导——高阶技术管理者的自我修养管理者正确地做事&#xff0c;领导者做正确的事。管理的终点是效率&#xff0c;领导的起点是方向。当你开始思考"我们该往哪里走"而不是"我们该怎么走快一点"&#xff0c;你就…...