机器学习第3章第8节 : 文字信息加密到图片及解密
来源:互联网 发布:我的世界优化怎么样 编辑:程序博客网 时间:2024/05/21 11:19
机器学习第3章第8节 : 文字信息加密到图片及解密
加密
思路
- 首先从源图中提取文字图像的信息.
- 记录这个文字图像信息在图像矩阵中的位置.
- 对载体文件进行预处理,将蓝色像素值全部设为偶数.
- 将记录的文字信息像素点在载体文件对应位置的蓝色像素值设为奇数.
步骤
- 读取原图像(将写上需隐藏文字的信息和载体图像),构造图像矩阵.
messageImg = cv2.imread(fnMessageImg) baseImg = cv2.imread(fnBaseImg) height = messageImg.shape[0] width = messageImg.shape[1]
- 在源图像中加上水印文字作为待隐藏文字.
cv2.putText(messageImg,"Hello World!",(20,300),cv2.FONT_HERSHEY_PLAIN,2.0,redColor,thickness = 2)
- 处理隐藏载体图,将所有的蓝色值变为偶数,以便加入隐藏信息.
#处理隐藏信息载体图 #将所有蓝色值变成偶数 for j in range(0,height): for i in range(0,width): if (baseImg[j,i,0] % 2) == 1: baseImg[j,i,0] -= 1
- 读取源图像,将源图像文字的像素点的对应位置的蓝色像素值设为奇数.
#读取源图,将信息写人目标图,将有信息的像素点的蓝色值设为奇数 for j in range(0,height): for i in range(0,width): if(messageImg[j,i,0],messageImg[j,i,1],messageImg[j,i,2]) == redColor: baseImg[j,i,0] += 1
代码
#!/usr/bin/env python# -*- coding: utf-8 -*-"""hideMessages.py图像隐藏信息的原理: 首先从源图中提取文字图像信息 记录这个文字图像信息像素点在图像矩阵的位置 对载体文件进行预处理,将蓝色像素值全部设为偶数 最后将记录的文字信息像素点在载体文件对应位置的蓝色像素值设为奇数图像隐藏信息解密原理: 提取载体文件中蓝色像素值为奇数的像素点@author: Oscar"""import cv2#含有文字的图像fnMessageImg = "img/test1.jpg"#载体文件fnBaseImg = "img/test2.jpg"#包含隐藏信息的载体文件fnSecretImg = "img/secret.jpg"#注意是(b,g,r),而不是(r,g,b)redColor=(0,0,255)if __name__ == "__main__": print(u"正在处理中......") #图像大小 messageImg = cv2.imread(fnMessageImg) baseImg = cv2.imread(fnBaseImg) height = messageImg.shape[0] width = messageImg.shape[1] #加上要隐藏的信息 cv2.putText(messageImg,"Hello World!",(20,300),cv2.FONT_HERSHEY_PLAIN,2.0,redColor,thickness = 2) cv2.namedWindow('messageImg') cv2.imshow('messageImg',messageImg) cv2.namedWindow('baseImg') cv2.imshow('baseImg',baseImg) #处理隐藏信息载体图 #将所有蓝色值变成偶数 for j in range(0,height): for i in range(0,width): if (baseImg[j,i,0] % 2) == 1: baseImg[j,i,0] -= 1 print("changing......",round(50*j / height),"%") mirror_w = width /2 #读取源图,将信息写人目标图,将有信息的像素点的蓝色值设为奇数 for j in range(0,height): for i in range(0,width): if(messageImg[j,i,0],messageImg[j,i,1],messageImg[j,i,2]) == redColor: baseImg[j,i,0] += 1 print("writing.......",round(50*j / height)+50,"%") #保存修改后的目标图,并显示 cv2.namedWindow('secretImg') cv2.imshow('secretImg',baseImg) cv2.imwrite(fnSecretImg,baseImg) cv2.waitKey() cv2.destroyAllWindows()
运行结果(加密)
源图像
载体图像
处理后的图像
解密
思路
解密信息是隐藏信息的逆过程,提取载体文件中蓝色像素值为奇数的像素点,将空白图像中的这些像素点对应的位置赋予统一的着色
代码
#!/usr/bin/env python# -*- coding: utf-8 -*-"""showHideMessage.py在之前的信息隐藏后,肉眼观察载体图像,仍无法察觉与之前相比有任何变化.解密信息与隐藏信息相反,是隐藏信息的逆过程图像隐藏信息解密原理: 提取载体文件中蓝色像素值为奇数的像素点@author: Oscar"""import cv2import numpy as npfn = "secretImg.png"if __name__ == "__main__": print(u"正在读取文件......") img = cv2.imread(fn) height = img.shape[0] width = img.shape[1] imgInfo = np.zeros((height,width,3),np.uint8) for j in range(0,height): for i in range(0,width): if (img[j,i,0] % 2) == 1: #如果蓝色值为奇数,则该像素点为文字 imgInfo[j,i,1] = 255 print(u"正在解密......",round(100*j / height),"%") cv2.imshow('imgInfo',imgInfo) #cv2.imwrite(fn,imgInfo) cv2.waitKey() cv2.destroyAllWindows()
运行结果(解密)
加密后的图片
解密后的图片
笔记
在这里,解密后的图片是黑色背景的原因是使用了numpy.zeros()产生的图像矩阵是BGR(0,0,0),所以背景是黑色.
阅读全文
0 0
- 机器学习第3章第8节 : 文字信息加密到图片及解密
- 机器学习第3章第7节 : 图片的平铺效果
- 机器学习第4章第1节 : R语言基本语法及操作
- 加密解密学习第一篇;生成,检查rsa密钥
- 机器学习第5章第2节 : LMS算法
- 机器学习实战第3章决策树
- 【机器学习实战】第3章 决策树
- 机器学习第5章第3节 : LMS的学习率退火算法
- 网络信息安全学习平台---解密关第5题
- 网络信息安全学习平台---解密关第9题
- 《加密与解密(第三版)》读书笔记第1章(基础知识)
- 第4章 字符串的加密与解密案例
- 机器学习第3章第3节 : OpenCV 的下载与安装
- 机器学习第3章第1节 : Anaconda3的安装和汉化
- 机器学习第3章第2节 : 绘制正余弦图像
- 机器学习第3章第4节 : 随机像素点的绘制
- 机器学习第3章第5节 : 调整图像亮度
- 机器学习第3章第6节 : 图像的日落效果
- uml 类图依赖与关联的区别
- 理解TCP为什么需要进行三次握手(白话)
- 期货ios模拟交易软件
- AtomicInteger源码解析
- Android 6.0 仿支付宝主页UI实战案例
- 机器学习第3章第8节 : 文字信息加密到图片及解密
- 完美世界2017校园招聘编程题
- Course 2-Improving Deep Neural Networks--Week 2
- NIO与IO复制相同文件的时间
- Hive常见内置函数及其使用
- window 8.1 安装 phpSutdy
- 2017php经典面试题 1、PHP语言的一
- FreeTextBox-在线编辑器
- md5、sha1+salt和Bcrypt对比