博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV-图像运算
阅读量:2051 次
发布时间:2019-04-28

本文共 3744 字,大约阅读时间需要 12 分钟。

图像运算

图像加法运算

在图像处理过程中,经常需要对图像进行加法运算。可以通过加号运算符“+”对图像进行加法运算,也可以通过cv2.add()函数对图像进行加法运算

通常情况下,在灰度图像中,像素用8个比特位(一个字节)来表示,像素值的范围是[0,255]。两个像素值在进行加法运算时,求得的和很可能超过255。上述两种不同的加法运算方式,对超过255的数值的处理方式是不一样的。

import cv2 import numpy as np
import cv2 img1=cv2.imread("LinuxLogo.jpg")img2=cv2.imread("WindowsLogo.jpg")img3=img1+img2cv2.imshow("add",img3)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

算术运算(加减乘除)

def add_demo(m1, m2):    dst = cv2.add(m1, m2)    cv2.imshow("add_demo", dst)
def subtract_demo(m1, m2):    dst = cv2.subtract(m1, m2)    cv2.imshow("subtract_demo", dst)
def divide_demo(m1, m2):    dst = cv2.divide(m1, m2)    cv2.imshow("divide_demo", dst)
def multiply_demo(m1, m2):    dst = cv2.multiply(m1, m2)    cv2.imshow("multiply_demo", dst)

图像调整

def contrast_brightness_demo(image, c, b):    h, w, ch = image.shape    blank = np.zeros([h, w, ch], image.dtype)    dst = cv2.addWeighted(image, c, blank, 1-c, b)    cv2.imshow("con-bri-demo", dst)

图像逻辑

与、或、异或、非:使用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()

在这里插入图片描述

图像加密

import cv2import numpy as np demo = cv2.imread("shenmi.jpg", 0)r, c = demo.shapekey = 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()

在这里插入图片描述

面部打码及解码

import cv2import numpy as nplena=cv2.imread("lena.bmp",0)r,c=lena.shapemask=np.zeros((r,c),dtype=np.uint8)mask[220:400,250:350]=1key=np.random.randint(0,256,size=[r,c],dtype=np.uint8) # 获取密匙lenaXorKey=cv2.bitwise_xor(lena,key)  # 对原图像加密encryptFace=cv2.bitwise_and(lenaXorKey,mask*255) # 获取加密图的脸部信息noFace1=cv2.bitwise_and(lena,(1-mask)*255)     # 将原图的脸部位置置0maskFace=encryptFace+noFace1                # 得到打码的原图  #解码extractOriginal=cv2.bitwise_xor(maskFace,key)   # 得到脸部的原始信息extractFace=cv2.bitwise_and(extractOriginal,mask*255)  # 提取脸部信息noFace2=cv2.bitwise_and(maskFace,(1-mask)*255)  # 从打码的原图内提取没有脸的原图extractLena=noFace2+extractFace     # 得到解码的原图#显示图像cv2.imshow("lena",lena)cv2.imshow("mask",mask*255)          cv2.imshow("1-mask",(1-mask)*255)cv2.imshow("key",key)cv2.imshow("lenaXorKey",lenaXorKey)cv2.imshow("encryptFace",encryptFace)cv2.imshow("noFace1",noFace1)cv2.imshow("maskFace",maskFace)cv2.imshow("extractOriginal",extractOriginal)cv2.imshow("extractFace",extractFace)cv2.imshow("noFace2",noFace2)cv2.imshow("extractLena",extractLena)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

数字水印

import cv2import numpy as nplena=cv2.imread("lena.bmp",0)watermark=cv2.imread("watermark.bmp",0)w=watermark[:,:]>0watermark[w]=1r,c=lena.shape#============嵌入过程============t254=np.ones((r,c),dtype=np.uint8)*254lenaH7=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[:,:]>0wm[w]=255#============显示============cv2.imshow("lena",lena)cv2.imshow("watermark",watermark*255)  cv2.imshow("e",e)cv2.imshow("wm",wm)cv2.waitKey()cv2.destroyAllWindows()

转载地址:http://zlklf.baihongyu.com/

你可能感兴趣的文章
【F12】谷歌浏览器--前台效果可以在不访问服务器的前提下直接改样式看效果是否是预期值。...
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>
单元测试需要具备的技能和4大阶段的学习
查看>>