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

OpenCV——图像按位运算

目录

  • 一、算法概述
    • 1、逻辑运算
    • 2、函数解析
    • 3、用途
  • 二、代码实现
  • 三、结果展示

在这里插入图片描述

OpenCV——图像按位运算由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、算法概述

1、逻辑运算

  OpenCV4 针对两个图像之间的“与”、“或”、“异或”、以及“非”运算分别提供了bitwise_and()bitwise_or()bitwise_xor()bitwise_not()函数。图像像素间的逻辑运算与数字间的逻辑运算相同,具体规则见表1。图像的“非”运算只针对一个数值进行,因此在表1中对像素求非运算时对图像1的像素进行“非”运算。如果像素取值只有0和1,那么表1中的前4行数据正好对应了所有的运算规则,但是CV_8U类型的图像像素值从0取到255,此时的逻辑运算就需要将像素值转成二进制后再进行,因此CV_8U类型是8位数据,对0求非是11111111,也就是255.在表1的最后一行数据中,像素5对应的二进制为101,像素值6对应的二进制是110,因此“与”运算得100(4),“或”运算得011(3),对像素5进行非运算得11111010(250)。

表1 图像逻辑运算规则

| 图像数据类型 | 像素值1| 像素值2 |与|或|异或|非(图像)
| ------ | ------ | ------ |------ |------ |------ |------ |------ |------ |
| 二值 | 0 | 0 |0|0|0|1|
| 二值 | 1 | 0 |0|1|1|0|
| 二值 | 0 | 1 |0|1|1|1|
| 二值 | 1 | 1 |1|1|0|0|
| 8位 | 0 | 0 |0|0|0|255|
| 8位 | 5| 6 |4|7|3|250|

2、函数解析

//像素求“与”运算
void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask = noArray());//像素求“或”运算
void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask = noArray());//像素求“异或”运算
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask = noArray());//像素求“非”运算
void bitwise_not(InputArray src, OutputArray dst,InputArray mask = noArray());
  • src1:第一个图像矩阵,可以是多通道图像数据。
  • src2:第二个图像矩阵,尺寸、通道数和数据类型都需要与src1一致。
  • dst:逻辑运算输出结果,尺寸、通道数和数据类型都与src1一致。
  • mask:掩膜,用于设置图像或矩阵中逻辑运算的范围。

   在进行逻辑运算时,一定要保证两个两个图像矩阵之间的尺寸、数据类型和通道数相同,多个通道进行逻辑运算时不同通道之间是独立运行的。

3、用途

  按位运算的用途:比如要得到一个加logo的图像。如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,这时候就需要用按位操作,既不改变图像颜色,又不改变图像透明度,类似PS。

二、代码实现

#include <opencv2\opencv.hpp>
#include <iostream>
#include <vector>
using namespace std;
using namespace cv;
int main()
{Mat img = imread("X8.jpg");if (img.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}//1、创建两个黑白图像Mat img0 = Mat::zeros(200, 200, CV_8UC1);Mat img1 = Mat::zeros(200, 200, CV_8UC1);Rect rect0(50, 50, 100, 100);img0(rect0) = Scalar(255);Rect rect1(100, 100, 100, 100);img1(rect1) = Scalar(255);imshow("img0", img0);imshow("img1", img1);//-----------------------------------------------------------------// 在进行逻辑运算时,一定要保证两个两个图像矩阵之间的尺寸、数据类型// 和通道数相同,多个通道进行逻辑运算时不同通道之间是独立运行的。//-----------------------------------------------------------------//2、进行逻辑运算Mat myAnd, myOr, myXor, myNot, imgNot;bitwise_not(img0, myNot);       // 逻辑“非”运算bitwise_and(img0, img1, myAnd); // 逻辑“与”运算bitwise_or(img0, img1, myOr);   // 逻辑“或”运算bitwise_xor(img0, img1, myXor); // 逻辑“异或”运算bitwise_not(img, imgNot);       // 逻辑“非”运算imshow("myAnd", myAnd);imshow("myOr", myOr);imshow("myXor", myXor);imshow("myNot", myNot);imshow("img", img);imshow("imgNot", imgNot);waitKey(0);return 0;
}

三、结果展示

在这里插入图片描述

相关文章:

OpenCV——图像按位运算

目录 一、算法概述1、逻辑运算2、函数解析3、用途 二、代码实现三、结果展示 OpenCV——图像按位运算由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、算法概述 1、逻辑运算 OpenCV4 针对两个图像之…...

5 个被低估的开源项目

文章目录 1.集算器 -数据处理2. Firecamp - 邮递员替代方案3.Keploy——后端 测试4. Hanko - 密钥验证5. Zrok - Ngrok 类固醇 长话短说 本文列出了五个不太受欢迎的优秀项目&#xff0c;您应该尝试一下。&#x1f525; 这些工具旨在改进数据处理、API 开发、后端测试、身份验…...

go语言初探(一)

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后&#xff0c;结果如下&#xff1a; 1、golang表达式中&#xff0c;加&#xff1b;和不加&#xff1b;都可以 2、函数的{和函数名一…...

跟着cherno手搓游戏引擎【7】Input轮询

在引擎程序中任何时间&#xff0c;任何位置都能知道按键是否按下、鼠标的位置等等信息。 与事件系统的区别&#xff1a;事件系统是在按下时调用并传递按键状态&#xff1b;轮询是每时每刻都能获取按键状态 创建基类&#xff1a; YOTO/Input.h&#xff1a;名如其意 #pragma …...

stm32 - GPIO高级用法

stm32 - GPIO高级用法 PWMPWM / LEDPWM / 电机 PWM PWM / LED PWM波通过改变占空比可以改变LED的亮度 PWM信号调节LED亮度时&#xff0c;信号频率保持不变&#xff0c;即一个周期时间不变&#xff0c;改变的是脉冲的高电平的时间&#xff0c;即LED的导通时间&#xff0c;占空比…...

CMake TcpServer项目 生成静态库.a / 动态库.so

CMake 实战构建TcpServer项目 静态库/动态库-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135608829?spm1001.2014.3001.5501 在这篇博客的基础上&#xff0c;我们把头文件放在include里边&#xff0c;把源文件放在src里边&#xff0c;重新构建 hehedali…...

为什么光刻要用黄光

光刻是集成电路&#xff08;IC或芯片&#xff09;制造中的重要工艺之一。简单来说&#xff0c;它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解&#xff0c;然后在腐蚀后&#xf…...

Python 两种多值参数

有时可能需要一个函数中处理的参数的个数是不确定的&#xff0c;就需要使用多值参数 参数名前加上*&#xff0c;代表可以接收元组参数名前加上**&#xff0c;代表可以接收字典 代码&#xff1a; def demo(*args, **kwargs):print(args)print(kwargs)demo(1, 2, 3, 4, 5, nam…...

【Python学习】Python学习19- 异常处理

目录 【Python学习】Python学习19- 异常处理 前言python标准异常异常处理带异常类型语法不带异常类型语法使用except而带多种异常类型try-finally 语句触发异常 参考 文章所属专区 Python学习 前言 本章节主要说明Python的异常处理。 python标准异常 BaseException 所有异常…...

《A++ 敏捷开发》- 4 三点估算

估算是一个范围&#xff0c;不是一个数 唐工&#xff1a;你估计完成开发用户登录模块要多少天&#xff1f;小李&#xff1a;3天。唐工&#xff1a;能在3天完成的可能性有多高&#xff1f;小李&#xff1a;可能性很高。唐工&#xff1a;可否量化一点?小李&#xff1a;可能性为5…...

cesiumlab切片通过arcgisjs加载

cesiumlab切片通过arcgisjs加载 需要注意2个地方&#xff0c;一个是tileInfo&#xff0c;一个是getTileUrl&#xff0c; 在tileInfo中定义好cesiumlab切片的相关信息。 getTileUrl 格式化url的格式。 注意设置编辑&#xff0c;避免超出范围报404。 <html lang"en"…...

React16源码: React中调度之scheduleWork的源码实现

scheduleWork 1 &#xff09; 概述 在 ReactDOM.render, setState, forceUpdate 这几个方法最终都调用了 scheduleWork 这个方法 在 scheduleWork 当中&#xff0c;它需要去找到更新对应的 FiberRoot 节点 在使用 ReactDOM.render 的时候&#xff0c;传给 scheduleWork 的就是…...

【STM32】| 02——常用外设 | I2C

系列文章目录 【STM32】| 01——常用外设 | USART 【STM32】| 02——常用外设 | I2C 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 简介2. I2C协议2.1 I2C物理连接2.2 I2C通信协议2.2.1 起始和停止信号2.2.2 数据有效性2.2.3 数据传输格式2.2.4 从机地址/数据方…...

微服务架构设计核心理论:掌握微服务设计精髓

文章目录 一、微服务与服务治理1、概述2、Two Pizza原则和微服务团队3、主链路规划4、服务治理和微服务生命周期5、微服务架构的网络层搭建6、微服务架构的部署结构7、面试题 二、配置中心1、为什么要配置中心2、配置中心高可用思考 三、服务监控1、业务埋点的技术选型2、用户行…...

.net core 6 集成和使用 mongodb

1、安装包 MongoDB.Driver 2、定义顶层类 /// <summary> /// monggodb规范 /// </summary> public abstract class MongoDBToolBase { /// <summary> /// 客户端 /// </summary> protected MongoClient mongoClient { get; private …...

07-微服务getaway网关详解

一、初识网关 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话会产生很多问题&#xff0c;例…...

MS2660:L1 频段卫星导航射频前端低噪声放大器芯片

MS2660 是一款具有高增益、低噪声系数的低噪声放 大器&#xff08;LNA&#xff09;芯片&#xff0c;支持 L1 频段多模式全球卫星定位&#xff0c;可 以应用于 GPS、北斗二代、伽利略、Glonass 等 GNSS 导航 接收机中。芯片采用先进工艺制造&#xff0c;封装采用 2 mm 2 mm …...

微信小程序防止截屏录屏

一、使用css添加水印 使用微信小程序原生的view和css给屏幕添加水印这样可以防止用户将小程序内的隐私数据进行截图或者录屏分享导致信息泄露&#xff0c;给小程序添加一个水印浮层。这样即使被截图或者拍照&#xff0c;也能轻松地确定泄露的源头。效果图如下&#xff1a; 代码…...

126.(leaflet篇)leaflet松散型arcgis缓存切片加载

地图之家总目录(订阅之前必须详细了解该博客) arcgis缓存切片数据格式如下: 完整代码工程包下载,运行如有问题,可“私信”博主。效果如下所示: leaflet松散型arcgis缓存切片加载 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYP...

物联网介绍

阅读引言&#xff1a; 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网&#xff08;Internet of Things&#xff0c;IOT&#xff1b;也称为Web of Things&#xff09;是指通过各种信息传感设 备&#xff0c;如传感器、…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...