opencv-python(十一)

 图像加法

import numpy as np
import cv2
img = cv2.imread('jk.jpg')
res = cv2.add(img, img)
cv2.imshow('Mypicture1',img)
cv2.imshow('MyPicture2',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

res = cv2.add(src1, src2, dst=None, mask=None, dtype=None)

src1:第一幅图像

src2:第二幅图像

mask:图像掩膜

dtype:图像数据类型

2幅图像必须相同大小才可以相加。图像加法就是图像的像素值相加,如果a+b > 255,则c=255。最大的特色是图像会变得更亮。

import cv2
import numpy as np

img = cv2.imread('jk.jpg')
res1 = cv2.add(img,img)
res2 = img + img
cv2.imshow('MyPicture1',img)
cv2.imshow('MyPicture2',res1)
cv2.imshow('Mypicture3', res2)

cv2.waitKey(0)
cv2.destroyAllWindows()

使用数学符号(+)执行图象加法。

c= a+b   # 如果a+b<=255

c = mod((a+b), 256)     #如果a+b>255,相当于取256的余数

掩膜

import cv2
import numpy as np

img1 = np.ones((4,5), dtype=np.uint8)*8
img2 = np.ones((4,5), dtype=np.uint8)*9
mask = np.zeros((4,5), dtype=np.uint8)
mask[1:3,1:4] = 255
dst = np.random.randint(0,256,(4,5), np.uint8)
print('img1=\n',img1)
print('img2=\n',img2)
print('mask=\n',mask)
print('最初值 dst=\n',dst)
dst = cv2.add(img1,img2,mask=mask)
print('结果值 dst=\n',dst)

重复曝光技术

图像加权和

dst = saturate(src1 X alpha + src2 X beta + gamma)

src1和src2必须是大小相同的图像

dst = addWeighted(src1, alpha, src2, beta, gamma)

import cv2
import numpy as np

src1 = np.ones((2,3), dtype=np.uint8)*10
src2 = np.ones((2,3), dtype=np.uint8)*50
alpha = 1
beta = 0.5
gamma = 5
print(f'src1=\n{src1}')
print(f'src2=\n{src2}')
dst = cv2.addWeighted(src1,alpha,src2,beta,gamma)
print(f'dst=\n{dst}')

图像的位运算

cv2.bitwise_and():相当于逻辑的and运算

cv2.bitwise_or():相当于逻辑的or运算

cv2.bitwise_not():相当于逻辑的not运算

cv2.bitwise_xor():相当于逻辑的xor运算

dis = cv2.bitwise_and(src1, src2, mask=None)

import cv2
import numpy as np
src1 = np.random.randint(0,255,(3,5),dtype=np.uint8)
src2 = np.zeros((3,5),dtype=np.uint8)
src2[0:2,0:2] = 255
dst = cv2.bitwise_and(src1,src2)
print(f'src1=\n{src1}')
print(f'src2=\n{src2}')
print(f'dst=\n{dst}')

import cv2
import numpy as np

src1 =cv2.imread('jk.jpg')
src2 = np.zeros(src1.shape, dtype = np.uint8)
src2[30:260,70:260,:] = 255  #  这是三维数组
dst = cv2.bitwise_and(src1,src2)
cv2.imshow('Hung',src1)
cv2.imshow('Mask',src2)
cv2.imshow('Result',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

dst = cv2.bitwise_or(src1, src2, mask=None)

import cv2
import numpy as np

src1 = cv2.imread('jk.jpg')
src2 = np.zeros(src1.shape,dtype=np.uint8)

src2[30:260,70:260,:] = 255
dst = cv2.bitwise_or(src1,src2)
cv2.imshow('Hung',src1)
cv2.imshow('mask',src2)
cv2.imshow('Result',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

dst = cv2.bitwise_not(src, mask=None)

import cv2
import numpy as np

src = cv2.imread('forest.jpg')
dst = cv2.bitwise_not(src)
cv2.imshow('Forest',src)
cv2.imshow('Result',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

dst = cv2.bitwise_xor(src1,src2,mask=None)

只要不相同则返回1.

任意像素与白色像素值(11111111)执行xor运算时,结果是not运算的结果。

人以像素于黑色像素值(00000000)执行xor运算时,结果是原像素值。

import cv2
import numpy as np

src1 = cv2.imread('forest.jpg')
src2 = np.zeros(src1.shape, dtype=np.uint8)
src2[:,120:360,:] = 255
dst = cv2.bitwise_xor(src1,src2)
cv2.imshow('Forest',src1)
cv2.imshow('Mask',src2)
cv2.imshow('Forest xor operation', dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

图像加密与解密

若C = A xor B

则A = B xor C

 将淹没图像B当作一个密钥图像,A于B的xor运算就可以为A图像加密,要解密就让密钥图像与C执行xor运算。

import cv2
import numpy as np

src = cv2.imread("forest.jpg")
key = np.random.randint(0,255,src.shape,dtype=np.uint8)
print(src.shape)
cv2.imshow('forest',src)
cv2.imshow('key',key)

img_encry = cv2.bitwise_xor(src,key)
img_decry = cv2.bitwise_xor(img_encry,key)
cv2.imshow('encrytion', img_encry)
cv2.imshow('decrytion',img_decry)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个非常强大的计算机视觉库,它提供了许多功能和工具,能够帮助我们处理图像和视频。而OpenCV-PythonOpenCVPython接口,使得我们可以使用Python编程语言来调用OpenCV库中的函数和方法。 OpenCV-Python-Headless版本是OpenCV-Python的一个变体,它的特点是没有图形用户界面,也就是没有窗口显示功能。这对于一些不需要图形界面的应用来说非常方便和节省资源。 在一些特殊场景下,我们可能希望在没有图形界面的环境中运行OpenCV-Python,例如在服务器上进行图像处理、机器学习等任务。在这种情况下,使用OpenCV-Python-Headless版本可以大大简化部署和使用的过程,并且节省计算资源。 使用OpenCV-Python-Headless版本时,我们可以通过命令行或Python脚本来调用OpenCV库中的函数和方法,进行图像处理、视频分析、特征提取等任务。只需在代码中导入OpenCV库,即可使用其提供的各种功能。 虽然OpenCV-Python-Headless版本没有图形界面,但它仍然提供了丰富的功能,可以进行图像处理、模式识别、目标检测、图像分割等操作。我们可以使用它进行图像的读取、保存、处理、转换等操作。 总结而言,OpenCV-Python-Headless版本是OpenCV-Python的一个变体,省去了图形界面部分,适用于在没有图形界面的环境中运行OpenCV库,方便进行图像处理、机器学习等任务,节省资源和简化部署过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值