我是靠谱客的博主 冷酷抽屉,最近开发中收集的这篇文章主要介绍OpenCV基础入门——图像运算前言一、加法运算二、逻辑运算与运用小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、加法运算
  • 二、逻辑运算与运用
    • 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基础入门——图像运算前言一、加法运算二、逻辑运算与运用小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部