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

一、加法运算

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 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()

python 复制代码
img = addWeighted(img1,alpha,img2,beta,gamma)

**img1、img2:**要融合的图像。

**alpha:**图像 1 的权重。

**beta:**图像 2 的权重。

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

python 复制代码
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 运算

python 复制代码
img = cv2.bitwise_and(img1,img2,mask=None)

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

**mask:**掩膜。

|-----|---|---|
| and | 1 | 0 |
| 1 | 1 | 0 |
| 0 | 0 | 0 |

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

python 复制代码
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 运算

python 复制代码
img = cv2.bitwise_or(img1,img2,mask=None)

|----|---|---|
| or | 1 | 0 |
| 1 | 1 | 1 |
| 0 | 1 | 0 |

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

python 复制代码
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 运算

只对单张图片进行处理。

python 复制代码
img = cv2.bitwise_or(img1,mask=None)

|-----|---|---|
| not | 1 | 0 |
| | 0 | 1 |

1 转为 0,0 转为 1。

python 复制代码
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 运算

python 复制代码
img = cv2.bitwise_xor(img1,img2,mask=None)

|-----|---|---|
| xor | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |

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

python 复制代码
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 要相同)

python 复制代码
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()

相关推荐
怒放吧德德3 分钟前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
aiguangyuan10 分钟前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手10 分钟前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀11 分钟前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
量子-Alex12 分钟前
【大模型RLHF】Training language models to follow instructions with human feedback
人工智能·语言模型·自然语言处理
kali-Myon12 分钟前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
晚霞的不甘17 分钟前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
陈天伟教授27 分钟前
人工智能应用- 语言处理:04.统计机器翻译
人工智能·自然语言处理·机器翻译
Dfreedom.34 分钟前
图像处理中的对比度增强与锐化
图像处理·人工智能·opencv·锐化·对比度增强
wenzhangli738 分钟前
OoderAgent 企业版 2.0 发布的意义:一次生态战略的全面升级
人工智能·开源