OpenCV-Python实战(6)——图相运算

一、加法运算

1.1 cv2.add()

res = cv2.add(img1,img2,dst=None,mask=None,dtype=None)

img1、img2:要 add 的图像对象。(shape必须相同)

mask:图像掩膜。灰度图(维度为2)。

dtype:图像数据类型。

add 后像素值最大为255。

+ 运算后取255的余数。

import cv2
import numpy as np

B = np.zeros((200,200,3),np.uint8)
G = np.zeros((200,200,3),np.uint8)
mask = np.zeros((200,200,1 ),np.uint8)

B[:,:,0]=255
G[:,:,1]=255
mask[50:150,50:150,:]=255

img_bg = cv2.add(B,G)
img_bg_mask = cv2.add(B,G,mask=mask)

cv2.imshow('B',B)
cv2.imshow('G',G)
cv2.imshow('mask',mask)
cv2.imshow('img_bg',img_bg)
cv2.imshow('img_bg_mask',img_bg_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

 1.2 cv2.addWeighted()

img = addWeighted(img1,alpha,img2,beta,gamma)

img1、img2:要融合的图像。

alpha:图像 1 的权重。

beta:图像 2 的权重。

gamma:图像校正值,默认为 0。

import cv2
import numpy as np

cat = cv2.resize(cv2.imread('cat.png'),(500,600))
dog = cv2.resize(cv2.imread('dog.png'),(500,600))
print(cat.shape)
print(dog.shape)
cat_dog = cv2.addWeighted(cat,0.5,dog,0.5,0)
img = np.hstack((cat,dog,cat_dog))
cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

二、图像逻辑运算 

2.1 and 运算

img = cv2.bitwise_and(img1,img2,mask=None)

img1、img2:要进行 and 运算的图像对象。

mask:掩膜。

and10
110
000

任意像素值与白色像素值(1)执行 and 运算后结果为原像素值; 任意像素值与黑色像素值(0)执行 or 运算后结果为黑色像素值。

import cv2
import numpy as np

lena = cv2.imread('Lena.png')
m = np.zeros(lena.shape,np.uint8)
m[200:350,200:350]=255
lena_m = cv2.bitwise_and(lena,m)

cv2.imshow('lena',lena)
cv2.imshow('m',m)
cv2.imshow('lena_m',lena_m)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 or 运算 

img = cv2.bitwise_or(img1,img2,mask=None)
or10
111
010

任意像素值与白色像素值(1)执行 or 运算后结果为白色像素值; 任意像素值与黑色像素值(0)执行 or 运算后结果为原像素值。

import cv2
import numpy as np

lena = cv2.imread('Lena.png')
m = np.zeros(lena.shape,np.uint8)
m[200:350,200:350]=255
lena_m = cv2.bitwise_or(lena,m)

cv2.imshow('lena',lena)
cv2.imshow('m',m)
cv2.imshow('lena_m',lena_m)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 not 运算 

只对单张图片进行处理。

img = cv2.bitwise_or(img1,mask=None)
not10
01

1 转为 0,0 转为 1。

import cv2
import numpy as np

lena = cv2.imread('Lena.png')
lena_m = cv2.bitwise_not(lena)

cv2.imshow('lena',lena)
cv2.imshow('lena_m',lena_m)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 xor 运算 

img = cv2.bitwise_xor(img1,img2,mask=None)
xor10
101
010

任意像素值与白色像素值(1)执行 xor 运算后结果为 not 运算结果; 任意像素值与黑色像素值(0)执行 xor 运算后结果为原像素值

import cv2
import numpy as np

lena = cv2.imread('Lena.png')
m = np.zeros(lena.shape,np.uint8)
m[200:400,:,:]=255
lena_m = cv2.bitwise_xor(lena,m)

cv2.imshow('lena',lena)
cv2.imshow('m',m)
cv2.imshow('lena_m',lena_m)

cv2.waitKey(0)
cv2.destroyAllWindows()

三、图像加密与解密

加密:img_key = img1 + img2;

解密:img_unkey = img_key + img2

这里以 img2 为马赛克背景。(注意:img1 与 img2 的 shape 要相同)

import cv2
import numpy as np

lena = cv2.imread('Lena.png')
key = np.random.randint(0,256,lena.shape,np.uint8)

lena_key = cv2.bitwise_xor(lena,key)  # 加密
lena_unkey = cv2.bitwise_xor(lena_key,key)  # 解密

cv2.imshow('lena',lena)
cv2.imshow('key',key)
cv2.imshow('lena_key',lena_key)
cv2.imshow('lena_unkey',lena_unkey)

cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943726.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode打卡:查询数组中元素出现的位置

执行结果:通过 题目 3159 查询数组中元素出现的位置 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 queries[i] ,你需要找到 nums 中第 queries[i] 个 x 的位置,并返回它的下标。如果数组中 x 的出…

向量组学习

向量组的秩及其线性组合 线性相关性 先看a1,a2 如果这两个向量不对应成比例的话,那必然内部不可能存在多余的向量,也就是无关. 主元所在的列都是独立向量 ,最大无关组就是b1,b2,b4,但这个是初等行变换后的,题目要的是A的,与之对应的就是a1,a2,a4 方程组解的结构

影视仓最新接口+内置本包方法的研究(2024.12.27)

近日喜欢上了研究影视的本地仓库内置,也做了一个分享到了群里。 内置本地仓库包的好处很明显,当前线路接口都是依赖网络上的代码站存放,如果维护者删除那就GG。 虽然有高手制作了很多本地包,但推送本地包到APP,难倒一片…

redis相关数据类型介绍

当然,Redis 作为一个高性能的键值存储系统,提供了多种数据类型来支持不同的应用场景。 1. String(字符串) • 定义:Redis 最基本的数据类型,用于存储字符串值。 • 操作:SET、GET、INCR、DECR、…

教师管理系统

大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…

lombok-macros

GITHUB 地址 LTPP-GIT 地址 官方文档 API 文档 一组提供 Lombok 类似功能的 Rust 宏。 安装 要使用此 crate,可以运行以下命令: cargo add lombok-macros用法 use lombok_macros::*;/// 定义一个结构体,使用 Lombok 宏派生所需的方法 #…

uniapp开发微信小程序实现获取“我的位置”

1. 创建GetLocation项目 使用HBuilder X创建一个项目GetLocation,使用Vue3。 2. 在腾讯地图开放平台中创建应用 要获取位置,在小程序中需要使用腾讯地图或是高德地图。下面以腾讯地图为例。 (1)打开腾讯地图开放平台官方网址:腾讯位置服务 - 立足生态,连接未来 (2)注册…

Docker基础知识 Docker命令、镜像、容器、数据卷、自定义镜像、使用Docker部署Java应用、部署前端代码、DockerCompose一键部署

目录 1.Docker 2.镜像和容器 2.1 定义 2.2 开机自动启动容器 3.docker命令 3.1 docker run 参数说明 3.2 常见命令 3.3 命令演示 3.4 命令别名 4.Docker命令详解 5.数据卷 5.1 定义 5.2 数据卷的相关命令 5.3 数据卷命令 5.4 挂载本地目录或文件 5.4.1 定义 5.4.2 mysql容器目录…

Linux | Ubuntu零基础安装学习cURL文件传输工具

目录 介绍 检查安装包 下载安装 手册 介绍 ‌cURL是一个利用URL语法在命令行下工作的文件传输工具,首次发行于1997年‌‌12。cURL支持多种协议,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…

c# 2024/12/27 周五

6《详解类型、变量与对象》36 详解类型、变量与对象 _1_哔哩哔哩_bilibili

yarn list --pattern vuex-module-decorators

dgqdgqdeMac-mini spid-admin % yarn list --pattern vuex-module-decorators yarn list v1.22.22 └─ vuex-module-decorators0.16.1 ✨ Done in 0.24s.好的,这段代码是一个典型的 Vuex 模块定义,使用了 vuex-module-decorators 库。这个库为 Vuex 提…

uniapp 判断多选、选中取消选中的逻辑处理

一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"

IDEA自己常用的几个快捷方式(自己的习惯)

TOC 背景 换工作了, 新的IDEA, 又要重新设置自己的快捷方式了. 灵感 1.这些个性话的配置应该是可以导出的. 然后在新的IDEA直接导入就行了, 感觉应该是有这个功能. 就是这个文件: <keymap version"1" name"Personal KeyMap" parent"$default…

学习AndroidPerfetto基础一

1.哔哩哔哩学习视频&#xff1a; Android Perfetto 基础和案例分享_哔哩哔哩_bilibili 2.Perfetto的简单介绍 Perfetto 是一个用于性能检测进而追踪分析的生产级开源工具 Perfetto提供上帝视角&#xff0c;背后需要整个Android系统的知识储备 Perfetto由Google开发&#x…

ffmpeg: stream_loop报错 Error while filtering: Operation not permitted

问题描述 执行ffmpeg命令的时候&#xff0c;报错&#xff1a;Error while filtering: Operation not permitted 我得命令如下 ffmpeg -framerate 25 -y -i /data/workerspace/mtk/work_home/mtk_202406111543-l9CSU91H1f1b3/tmp/%08d.png -stream_loop -1 -i /data/workerspa…

快速掌握Elasticsearch检索之二:滚动查询获取全量数据(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 1、滚动查询的使用场景 滚动查询区别于上一篇文章介绍的使用from、size分页检索&#xff0c;最大的特点是&#xff0c;它能够检索超过10000条外的…

StableAnimator模型的部署:复旦微软提出可实现高质量和高保真的ID一致性人类视频生成

文章目录 一、项目介绍二、项目部署模型的权重下载提取目标图像的关节点图像&#xff08;这个可以先不看先用官方提供的数据集进行生成&#xff09;提取人脸&#xff08;这个也可以先不看&#xff09;进行图片的生成 三、模型部署报错 一、项目介绍 由复旦、微软、虎牙、CMU的…

【深度学习】Java DL4J基于 CNN 构建车辆识别与跟踪模型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

如何在短时间内读懂复杂的英文文献?

当我们拿起一篇文献开始阅读时&#xff0c;就像是打开了一扇通往未知世界的大门。但别急着一头扎进去&#xff0c;咱们得像个侦探一样&#xff0c;带着疑问去探险。毕竟&#xff0c;知识的海洋深不可测&#xff0c;不带点“装备”怎么行&#xff1f;今天就聊聊&#xff0c;平时…

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…