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

devtools/2025/1/1 1:44:01/

一、加法运算

1.1 cv2.add()

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

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

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

dtype:图像数据类型。

add 后像素值最大为255。

+ 运算后取255的余数。

python">import cv2
import numpy as npB = 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,:]=255img_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()

python">img = addWeighted(img1,alpha,img2,beta,gamma)

img1、img2:要融合的图像。

alpha:图像 1 的权重。

beta:图像 2 的权重。

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

python">import cv2
import numpy as npcat = 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 运算

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

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

mask:掩膜。

and10
110
000

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

python">import cv2
import numpy as nplena = 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 运算 

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

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

python">import cv2
import numpy as nplena = 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 运算 

只对单张图片进行处理。

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

1 转为 0,0 转为 1。

python">import cv2
import numpy as nplena = 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 运算 

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

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

python">import cv2
import numpy as nplena = 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 要相同)

python">import cv2
import numpy as nplena = 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()


http://www.ppmy.cn/devtools/146507.html

相关文章

通过MySQL binlog日志,使用canal同步分库分表数据,到 Elasticsearch

前言 通过简单干净实践的方式教会读者,配置出一套 Canal 工具服务,来同步分库分表的数据到 Elasticsearch 文件夹系统中。同时在 SpringBoot 工程中,配置出两套数据源,一套是 MySQL MyBatis,一套是 Elasticsearch My…

在算力魔方上运行Genesis:一款颠覆性开源生成式物理引擎!

作者:算力魔方创始人 刘力 一,Genesis简介 Genesis是一款由19个顶尖科研机构联手打造的,用于通用机器人、具身智能和物理 AI 应用的开源生成式物理引擎。它可以生成整个世界,包括相机运动、机器人任务和交互式 3D 场景等。其特点有…

鸿蒙Next如何实现打开相册选图片功能?

问题描述:鸿蒙Next如何实现打开相册选图片功能 应用场景:用户个人中心自定义头像的时候,需要选择相册上传照片。 解决方案: 使用picker这个API实现从系统上获取相册图片这个点的, 1、首先要实例一个选择参数PhotoS…

分阶段总结:建材制造业“数字化转型”总体架构与实现路径

​一直以来,非金属矿物制品业都是我国工业支柱行业之一,也是我国中小企业较为集聚的细分行业之一,中小企业主营业务集中分布在矿渣微粉、水泥、混凝土减水剂、混凝土、砂浆、玻璃、灰砂砖、墙体、板材等建材制造领域,行业内创新型…

leetcode 05 回文字符串

leetcode 05 回文字符串 1. 描述 给你一个字符串,找到里面最长的回文字符串 2. 事例 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: …

Linux系统之tree命令的基本使用

Linux系统之tree命令的基本使用 一、tree命令介绍二、tree工具安装三、tree命令帮助3.1 查询帮助信息3.2 tree命令帮助解释 四、tree命令的基本使用4.1 直接使用4.2 *限制显示的层级4.3 仅显示目录4.4 不显示隐藏文件4.5 显示文件大小4.6 彩色输出4.7 输出到文件4.8 输出不同格…

安全技术运营的心得

一些思维: 为什么要说这个,既然说到运营,我们会和很多不是安全科班,以及才接触安全的同事打交道,对于安全事件的处理想法肯定都是不一样的,希望这些会对我带来帮助。 漏斗思维: 就拿扫地来说&…

PyTorch Instance Normalization介绍

Instance Normalization(实例归一化) 是一种标准化技术,与 Batch Normalization 类似,但它对每个样本独立地对每个通道进行归一化,而不依赖于小批量数据的统计信息。这使得它非常适合小批量训练任务以及图像生成任务(如风格迁移)。 Instance Normalization 的原理 对每…