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

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


http://www.kler.cn/a/457106.html

相关文章:

  • 实际开发中,前端项目安装依赖问题总结
  • ThinkPHP 8高效构建Web应用-第一个简单的MVC应用示例
  • Unity3D仿星露谷物语开发12之创建道具列表
  • 30天开发操作系统 第 10 天 -- 叠加处理
  • python修改ppt中的文字部分及插入图片
  • Docker+Portainer 离线安装
  • adb无线连接手机后scrcpy连接报错ERROR: Could not find any ADB device
  • Debian-linux运维-docker安装和配置
  • HarmonyOS NEXT 实战之元服务:静态案例效果---我的订阅每日咨询
  • 打造智能化恶意软件检测桌面系统:从数据分析到一键报告生成
  • 外网访问 Docker 容器的可视化管理工具 DockerUI
  • 郴州年夜饭大数据分析:Python爬虫的美味之旅
  • 大模型的实践应用33-关于大模型中的Qwen2与Llama3具体架构的差异全解析
  • 基于 Ragflow 搭建知识库-初步实践
  • 贪心算法解决单调递增数字问题
  • Vivado常用IP例化1
  • Go语言zero项目服务恢复与迁移文档
  • 谈谈前端对链表的理解
  • Kinova在开源家庭服务机器人TidyBot++研究里大展身手
  • C#实验室信息系统源码,检验流程信息化LIS系统
  • Spring创建异步线程池方式
  • Linux 安装rpm
  • Android图形绘制之Shapes包详解
  • 关于Mysql表结构的元数据锁
  • ElasticSearch 统计分析全攻略
  • 数据结构课程设计/校园导游程序及通信线路设计 #2