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

opencv 按位操作

opencv位运算说明

按位与,按位或,按位非,按位异或

在 OpenCV 中,按位操作函数的接口一般包括两个或多个图像数组(矩阵)作为输入,常常还会有一个可选的掩码参数。下面我列出每个函数的具体接口参数及其意义说明:

1. cv2.bitwise_and(按位与)

  • 功能:两个图像的对应像素按位相与。只有当两个图像的像素值都为 1 时,结果才为 1。
  • 常用于:将图像与掩码结合,提取感兴趣的区域。

 cv2.bitwise_and(src1, src2[, dst[, mask]]) -> dst

  • src1:输入图像1。必须是与 src2 尺寸相同、类型一致的数组(通常是单通道或三通道图像)。
  • src2:输入图像2。与 src1 尺寸和类型一致的数组。
  • dst(可选):输出图像,尺寸和类型与 src1src2 相同。如果省略,函数会返回新的数组。
  • mask(可选):操作掩码,尺寸和类型为单通道 8 位图像。此掩码用于限定操作的区域,掩码为 0 的位置不会被处理。

2. cv2.bitwise_or(按位或)

  • 功能:两个图像的对应像素按位相或。只要有一个像素值为 1,结果就是 1。
  • 常用于:合并两幅图像的区域。

 cv2.bitwise_or(src1, src2[, dst[, mask]]) -> dst

  • src1:输入图像1,必须与 src2 尺寸和类型一致。
  • src2:输入图像2,尺寸和类型与 src1 一致。
  • dst(可选):输出图像,尺寸和类型与输入图像一致。如果省略,函数会返回新的数组。
  • mask(可选):掩码图像,单通道 8 位图像。仅在掩码非零的地方执行操作。

3. cv2.bitwise_not(按位非)

  • 功能:对图像的每个像素取反,将 1 变为 0,0 变为 1。
  • 常用于:反转二值图像或图像的掩码。

 cv2.bitwise_not(src[, dst[, mask]]) -> dst

  • src:输入图像,可以是单通道或多通道图像。
  • dst(可选):输出图像,尺寸和类型与 src 一致。如果省略,函数会返回新的数组。
  • mask(可选):操作掩码,单通道 8 位图像。此掩码用于限定操作的区域,掩码为 0 的位置不会被处理。

4. cv2.bitwise_xor(按位异或)

  • 功能:两个图像的对应像素按位异或。只有当两个像素值不同时,结果才为 1。
  • 常用于:比较两个图像的差异。

 cv2.bitwise_xor(src1, src2[, dst[, mask]]) -> dst

  • src1:输入图像1,必须与 src2 尺寸和类型一致。
  • src2:输入图像2,尺寸和类型与 src1 一致。
  • dst(可选):输出图像,尺寸和类型与输入图像一致。如果省略,函数会返回新的数组。
  • mask(可选):掩码图像,单通道 8 位图像。仅在掩码非零的地方执行操作。

参数说明:

  • src1/src2:输入图像数组。可以是单通道(灰度图像)或三通道(彩色图像),类型通常为 8 位(如 np.uint8),尺寸必须相同。
  • dst:输出图像数组,类型与输入图像相同。此参数是可选的,如果没有提供,函数会创建并返回新的数组。
  • mask:掩码图像。它是一个单通道的二值图像(8 位图像),用于指定操作区域。仅当掩码位置为非零时,该位置的像素才会被处理。

注:可选参数在使用时必须显示赋值,除非所有可选参数都按顺序进行赋值

这些参数允许在处理图像时具有更高的灵活性,特别是掩码 mask 参数,可以控制操作只发生在图像的特定区域。

图像与自身位运算

按位与,按位或,按位非,按位异或

1. 按位与操作(bitwise_and

  • 操作result = cv2.bitwise_and(image, image)
  • 结果:图像与自身按位与的结果是 原图像本身
  • 原因:按位与的规则是只有两个像素值都为 1 时,结果才为 1。图像与自身比较时,每个像素值与自身做比较,结果就是原像素值不变。即 pixel & pixel == pixel

2. 按位或操作(bitwise_or

  • 操作result = cv2.bitwise_or(image, image)
  • 结果:图像与自身按位或的结果也是 原图像本身
  • 原因:按位或的规则是只要有一个像素值为 1,结果就为 1。由于图像每个像素值与自身做比较,因此结果仍然是原像素值不变。即 pixel | pixel == pixel

3. 按位非操作(bitwise_not

  • 操作result = cv2.bitwise_not(image)

  • 结果:图像按位非操作的结果是 反转图像

  • 原因:按位非会将图像中每个像素的位值取反。对于 8 位图像,像素值范围是 0-255,按位非会将每个像素的值变为 255 - pixel_value。例如,像素值为 0 的位置变为 255,像素值为 255 的位置变为 0。因此,按位非操作会将图像的颜色反转。

  • 示例:如果原图像是黑色(0)的地方,结果图像变成白色(255);白色(255)的地方变成黑色(0)。

4. 按位异或操作(bitwise_xor

  • 操作result = cv2.bitwise_xor(image, image)
  • 结果:图像与自身按位异或的结果是 全黑图像(所有像素值为 0)。
  • 原因:按位异或的规则是当两个像素值不同,结果为 1;当两个像素值相同时,结果为 0。由于图像的每个像素值都与自身完全相同,因此每个像素都会产生 0,结果是全黑图像。即 pixel ^ pixel == 0

结果总结:

  • cv2.bitwise_and(image, image):结果是 原图像本身
  • cv2.bitwise_or(image, image):结果是 原图像本身
  • cv2.bitwise_not(image):结果是 反转后的图像
  • cv2.bitwise_xor(image, image):结果是 全黑图像

相关文章:

opencv 按位操作

opencv位运算说明 按位与,按位或,按位非,按位异或 在 OpenCV 中,按位操作函数的接口一般包括两个或多个图像数组(矩阵)作为输入,常常还会有一个可选的掩码参数。下面我列出每个函数的具体接口…...

【Bug】STM32串口空闲中断接收不定长数据异常

Bug 使用标准库配置STM32F103C8T6的串口1开启接收中断和空闲中断,通过空闲中断来判断数据发送是否结束,收到数据后切换板载LED灯所接引脚电平,发现LED出现三种情况,熄灭、微亮、正常亮,但是LED灯所接的GPIO引脚为PC13…...

使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题

一、项目简介 使用过ABP框架的童鞋应该知道它也自带了一款免费的Blazor UI主题,它的页面是长这样的: 个人感觉不太美观,于是网上搜了很多Blazor开源组件库,发现有一款样式非常不错的组件库,名叫:Radzen&am…...

Java入门4——输入输出+实用的函数

在本篇博客,采用代码解释的方法,帮助大家熟悉Java的语法 一、输入和输出 在Java当中,我们一般有这样输入输出: import java.util.Scanner;public class javaSchool {public static void main(String[] args) {Scanner scanner …...

《当尼采哭泣》

这是一个相互救赎的故事。故事铺垫比较冗长,看到一半的时候一度看不下去。直到看到最后两章才最终感觉值得一看。很多表层现象,就像露出水面的冰山。解决表面的问题,需要深挖冰山水下的部分。一个人碰到的最难解决的问题不在外部,…...

TOMCAT Using CATALINA——OPTS,闪退解决方法(两种)

【Java实践】安装tomcat启动startup.bat出现闪退问题_安装tomcat点击startup闪退-CSDN博客...

Android音视频 MediaCodec框架-启动编码(4)

Android音视频 MediaCodec框架-启动编码 简述 上一节我们介绍了MediaCodec框架创建编码器流程,编解码的流程其实基本是一样的,只是底层的最终的实现组件不同,所以我们只看启动编码流程。 MediaCodec启动编码 从MediaCodec的start方法开始…...

# Go 语言中的 Interface 和 Struct

go package mainimport ("fmt" )// Girl 是一个接口,定义了所有"女性"类型都应该实现的方法 type Girl interface {call()introduce() }// Wife 结构体代表妻子 type wife struct {name stringage intyearsWed int }// call 方法…...

SSM与Springboot是什么关系? -----区别与联系

SSM(Spring Spring MVC MyBatis)和 Spring Boot 都是基于 Spring 框架的技术栈,但它们在使用方式、配置复杂度以及设计理念上有所不同。下面是 SSM 和 Spring Boot 之间的关系及主要区别: SSM (Spring Spring MVC MyBatis) 定…...

MATLAB小波变换图像融合系统

二、应用背景及意义 本课题利用小波变换进行图像的融合,然后对融合的结果进行图像质量的评价。所谓小波变换图像融合就是对多个的信息目标进行一系列的图像提取和合成,进而可以获得对同一个信息目标的更为精确、全面、可靠的高低频图像信息描述。并且也…...

nginx-安装和80端口映射多域名和ssl

一、安装所需插件 1、安装 gcc gcc是linux下的编译器,它可以编译 C,C,Ada,Object C和Java等语言。 yum -y install gcc 2、安装pcre、pcre-devel pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析 正则表达式。…...

SVN小乌龟 create patch 和 apply patch 功能

在SVN(Subversion)版本控制系统中,使用“小乌龟”(TortoiseSVN)这个图形界面工具可以极大地简化SVN操作。TortoiseSVN中的“create patch”和“apply patch”是两个非常有用的功能,它们与版本控制中的补丁&…...

#MySQL `SELECT` 语句执行流程详解

在数据库操作中,MySQL 的 SELECT 语句是用于查询数据最常见的 SQL 语句之一。理解它的执行流程对数据库优化和性能提升具有至关重要的意义。本文将详细解析 SELECT 语句从发出请求到返回结果的每个步骤,并结合 MySQL 的架构为您提供深度理解。 ## 1. 连接…...

docker容器运行一段时间提示Failed to initialize NVML: Unknown Error

情况描述 服务器使用docker启动容器。启动以后一切正常也能跑程序。但是,在运行一段时间(2天左右不等),会发现gpu掉了。输入nvidia-smi提示 Failed to initialize NVML: Unknown Error 主要发生条件是,docker启动的…...

PPT自动化:快速更换PPT图片(如何保留原图片样式等参数更换图片)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT更换图片 📒1. 安装 `python-pptx` 模块2. 加载PPT文件3. 查找并替换图片3.1 查找图片形状3.2 获取原图片的样式和位置3.3 替换图片4. 保存修改后的PPT文件5. 设置图片的相关参数5.1 设置透明度5.2 设置边框🚀 保留所有参…...

秒懂MVC, MVP, MVVM框架

框架的目标 关注点分离 (separation of concerns)低耦合 (Loose coupling)容易维护 (Maintainable)容易被测试 (Testable)...

IDEA社区版如何用tomcat运行war包

前言 我们在使用IDEA开发Java应用时,有时候需要运行的不是jar包,而是war包,但IDEA社区版默认是不支持tomcat容器的,无法直接运行war包。不过好在我们有一个强大的插件来支持我们使用tomcat,那么,我们应该如…...

如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚

在开发过程中,偶尔会遇到不小心将功能开发提交到错误分支上的情况。假设我们计划在 10 月 24 号上线某些功能,但却不小心在 10 月 17 号的上线分支上进行了开发。为了解决这个问题并将误提交的内容移到正确的分支上,我们可以借助 Git 的一些功…...

Goland 搭建Gin脚手架

一、使用编辑器goland 搭建gin 打开编辑器 新建项目后 点击 create 二、获得Gin框架的代码 命令行安装 go get -u github.com/gin-gonic/gin 如果安装不上,配置一下环境 下载完成 官网git上下载 这样就下载完成了。、 不过这种方法需要设置一下GOPATH 然后再执…...

Java Spring的高级装配

1.profile与bean 1.1 profile 如果我们在配置类中装配一个bean,但是这个bean与环境相关怎么办? 比如有一个类,它在开发环境采取一种模式,但是到了生产环境,有需要使用另一种环境。 当然,你可能会说&…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...