图像运算

时光毁灭记忆、已成空白 提交于 2020-02-02 02:58:35

第3章 图像运算

1. 加法

(一)使用“+”号时,
a+b={a+b,a+b<=255(a+b)%255,a+b>255 a+b=\begin{cases} a+b , \quad \quad \quad\quad a+b<=255 \\\\ (a+b)\%255 ,\quad a+b>255 \end{cases}
(二)使用 cv2.add()函数时,
a+b={a+b,a+b<=255255,a+b>255 a+b=\begin{cases} a+b , \quad \quad\quad a+b<=255 \\\\ 255 ,\quad\quad \quad\quad a+b>255 \end{cases}

import cv2
import numpy as np
img1=np.random.randint(0,256,(3,3),dtype=np.uint8)
img2=np.random.randint(0,256,(3,3),dtype=np.uint8)
print("img1=\n",img1)
print("img2=\n",img2)

img3=img2+img1
print("img3=\n",img3)

img4=cv2.add(img1,img2)
print("img4=\n",img4)

2.加权加法

dst=saturate(src1α+src2β+γ)dst =saturate(src1* \alpha+src2*\beta+\gamma)

即结果图像=取饱和值(图像1 * 权值1+图像2 * 权值2+亮度调节量)

cv2.addweighted(src1, alpha , src2, beta, gamma)

import cv2
import numpy as np
a=cv2.imread("5.jpeg")
b=cv2.imread("6.jpg")
print(a.shape)
print(b.shape)
a=a[50:250,20:220]
b=b[70:270,120:320]
#以上是为了把两个图像变成大小一样的数组

result=cv2.addWeighted(a,0.35,b,0.65,0)
cv2.imshow("result",result)
cv2.waitKey()

2020-01-21 15-12-30 的屏幕截图

3.掩模

也成为掩玛

原理就是用 and,or,nor 去把部分信息掩盖。

import cv2
import numpy as np
a=cv2.imread("5.jpeg")
print(a.shape)
#b=np.random.randint(1,255,a.shape,dtype=np.uint8)
b=np.zeros(a.shape,dtype=np.uint8)
b[100:200,100:200]= 255
print("a.shape=",a.shape)
cv2.imshow("a",a)
cv2.imshow("b",b)
c=cv2.bitwise_and(a,b)
cv2.imshow("c",c)
cv2.waitKey()

4.位平面分解

在8 位灰度图中,每一个像素使用8 位二进制值来表示,其值的范围在 [0.255] 之间,可以将其中的值表示为

value=a727+a626+a525+a424+a323+a222+a121+a020value= a_7 * 2^7+a_6* 2^6+a_5 * 2^5+a_4 * 2^4+a_3 * 2^3+a_2 * 2^2+a_1 * 2^1+a_0 * 2^0

故而可将8位灰度图分解为8个位平面。

此代码可以观察灰度图像的各个位平面

import  cv2
import numpy as np
lena=cv2.imread("5.jpeg",0)
print(lena.shape)
cv2.imshow("lena",lena)
r,c=lena.shape
x=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    x[:,:,i]=2**i

a=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    a[:,:,i]=cv2.bitwise_and(lena,x[:,:,i])
    mask=a[:,:,i]>0
    a[mask]=255
    cv2.imshow("bitmap :"+str(i),a[:,:,i])  //str函数用来避免把变量转成字符
cv2.waitKey()

2020-01-21 19-28-50 的屏幕截图

5.图像加密和解密

a:明文,原始数据

b:密匙

c:秘文 ,通过xor(a,b)实现

加密过程:c=xor(a,b)

解密过程:a=xor(c,b)

import cv2
import numpy as np

lena=cv2.imread("5.jpeg",0)						#原始图像
r,c=lena.shape
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)		#密钥图像
encryption=cv2.bitwise_xor(lena,key)											#加密图像
decryption=cv2.bitwise_xor(encryption,key)								#解密图像
cv2.imshow("lena",lena)
cv2.imshow("key",key)
cv2.imshow("encryption",encryption)
cv2.imshow("decryption",decryption)
cv2.waitKey()

2020-01-21 20-50-29 的屏幕截图

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!