ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV基础入门——图像运算

2022-11-02 14:22:03  阅读:236  来源: 互联网

标签:opencv 基础 入门 运算


一、加法运算

在图像处理过程中,经常需要对图像进行加法运算。可以通过加号运算符“+”对图像进行加法运算,也可以通过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,基础,入门,运算
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有