概述
文章目录
- 前言
- 一、加法运算
- 二、逻辑运算与运用
- 1.图像加密和解密
- 2.面部打码
- 3.数字水印
- 小结
前言
© Fu Xianjun. All Rights Reserved.
提示:以下是本篇文章正文内容,下面案例可供参考
一、加法运算
在图像处理过程中,经常需要对图像进行加法运算。可以通过加号运算符“+”对图像进行加法运算,也可以通过cv2.add()函数对图像进行加法运算。
- 使用加号进行图像的运算代码如下(示例):
import cv2
import numpy as np
img1=cv2.imread("LinuxLogo.jpg")
img2=cv2.imread("WindowsLogo.jpg")
img3=img1+img2
cv2.imshow("add",img3)
cv2.waitKey()
cv2.destroyAllWindows()
函数cv2.add()可以计算图像像素值相加的和
- 使用随机数组模拟灰度图,观察cv2.add()对像素值求和的结果代码如下(示例):
二、逻辑运算与运用
逻辑运算是一种非常重要的运算方式,图像处理过程中经常要按照位进行逻辑运算,简称位运算。在OpenCV内,常见的位运算函数有:
函数名 | 基本含义 |
---|---|
cv2.bitwise_and() | 按位与 |
cv2.bitwise_or() | 按位或 |
cv2.bitwise_xor() | 按位异或 |
cv2.bitwise_not() | 按位取反 |
相对应函数使用代码如下(示例):
按位与 按位或
def logic_demo(m1, m2):
dst1 = cv2.bitwise_and(m1, m2)
dst2 = cv2.bitwise_or(m1, m2)
cv2.imshow("logic_demo_and", dst1)
cv2.imshow("logic_demo_or",dst2)
按位非运算 按位异或
def logic_demo2(m1,m2):
dst1=cv2.bitwise_not(m1,m2)
dst2=cv2.bitwise_xor(m1,m2)
cv2.imshow("logic_demo_not", dst1)
cv2.imshow("logic_demo_xor",dst2)
实现
img1=cv2.imread("LinuxLogo.jpg")
img2=cv2.imread("WindowsLogo.jpg")
cv2.imshow("image1", img1)
cv2.imshow("image2", img2)
logic_demo(img1,img2)
#logic_demo2(img2,img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
1.图像加密和解密
通过图像按位异或实现加密和解密的过程代码如下(示例):
import cv2
import numpy as np
demo = cv2.imread("shenmi.jpg", 0)
r, c = demo.shape
key = np.random.randint(0, 256, size=(r, c), dtype=np.uint8) # 生成随机的密钥图像
cv2.imshow("shenmi", demo) # 显示原始图像
cv2.imshow("key", key) # 显示密钥图像
encryption = cv2.bitwise_xor(demo, key) # 加密
decryption = cv2.bitwise_xor(encryption, key) # 解密
cv2.imshow("jiami", encryption) # 显示密文图像
cv2.imshow("jiemi", decryption) # 显示解密后的图像
cv2.waitKey(-1)
cv2.destroyAllWindows()
2.面部打码
将图片进行面部打码代码如下(示例):
import cv2
import numpy as np
img = cv2.imread("shenmi.jpg",0)
height,width=img.shape
mask=np.zeros((height,width),dtype=np.uint8)
mask[31:124,63:111]=1
key=np.random.randint(0,256,size=(height,width),dtype=np.uint8)
shenmi=cv2.bitwise_xor(img,key)
face=cv2.bitwise_and(shenmi,mask*255)
noface = cv2.bitwise_and(img,(1-mask)*255)
final=face+noface
mask[45:130,125:191]=1
key=np.random.randint(0,256,size=(height,width),dtype=np.uint8)
shenmi=cv2.bitwise_xor(img,key)
face=cv2.bitwise_and(shenmi,mask*255)
noface2 = cv2.bitwise_and(img,(1-mask)*255)
cv2.imshow("img",img)
cv2.imshow("noface ",noface )
cv2.imshow("noface2 ",noface2 )
cv2.waitKey()
cv2.destroyAllWindows()
效果如下(示例):
3.数字水印
图片进行数字水印代码如下(示例):
import cv2
import numpy as np
lena=cv2.imread("lena.bmp",0)
watermark=cv2.imread("watermark.bmp",0)
w=watermark[:,:]>0
watermark[w]=1
r,c=lena.shape
#============嵌入过程============
t254=np.ones((r,c),dtype=np.uint8)*254
lenaH7=cv2.bitwise_and(lena,t254)
e=cv2.bitwise_or(lenaH7,watermark)
#============提取过程============
t1=np.ones((r,c),dtype=np.uint8)
wm=cv2.bitwise_and(e,t1)
print(wm)
w=wm[:,:]>0
wm[w]=255
#============显示============
cv2.imshow("lena",lena)
cv2.imshow("watermark",watermark*255)
cv2.imshow("e",e)
cv2.imshow("wm",wm)
cv2.waitKey()
cv2.destroyAllWindows()
小结
以上就是简单介绍了加法运算、逻辑运算,并使用它们实现了图像异或加密、图像加密与解密、面部打码、数字运算等实例。最后
以上就是冷酷抽屉为你收集整理的OpenCV基础入门——图像运算前言一、加法运算二、逻辑运算与运用小结的全部内容,希望文章能够帮你解决OpenCV基础入门——图像运算前言一、加法运算二、逻辑运算与运用小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复