Python实现图像信息隐藏

Python实现图像信息隐藏

之前学习密码学的时候老师有提到过『信息隐藏』,现在用图像的方法尝试一下。思想是:把信息藏到RGB通道中的B通道,然后利用奇偶性可以恢复过来

原理

  • 从源图中提取文字图像信息,记录这个文字图像信息像素点在图像矩阵中的位置
  • 载体图片进行预处理,将B通道的像素值全部设置成偶数
  • 载体图片中,把第一步已经记录的位置的像素B通道设置为奇数
  • 信息解码的过程就是逆过程,只要找出载体图片中B通道是奇数的像素位置,然后统一着色就可以恢复

实现

一、写入要隐藏的信息

1source = cv2.imread('img/source.png') 2h, w = source.shape[:2] 3message = 'Hello World!' 4x, y = (180, 250) 5color = [88, 26, 16] 6cv2.putText(source, message, (x, y), cv2.QT_FONT_BLACK, 3, color, thickness=5) 7cv2.imwrite('img/s.png', source)

原图source.png

加入信息后的图片s.png

二、预处理载体图片

1carrier = cv2.imread('img/carrier.png') 2for i in xrange(h): 3 for j in xrange(w): 4 # 把整幅图的B通道全设置为偶数 5 if carrier[i, j, 0] % 2 == 1: 6 carrier[i, j, 0] -= 1

三、把隐藏信息的位置设置成奇数

1for i in xrange(h): 2 for j in xrange(w): 3 # 找出有文字的位置 4 if list(source[i, j]) == color: 5 carrier[i, j, 0] += 1 6cv2.imwrite('img/hide.png', carrier)

加入信息之后的载体图片与原来几乎不变

原载体图片carrier.png

隐藏信息后的图片hide.png

四、信息恢复

1img = cv2.imread('img/hide.png') 2h, w = img.shape[:2] 3# 新建一张图用来放解出来的信息 4info = np.zeros((h, w, 3), np.uint8) 5for i in xrange(h): 6 for j in xrange(w): 7 # 发现B通道为奇数则为信息的内容 8 if img[i, j, 0] % 2 == 1: 9 info[i, j, 0] = 255 10 info[i, j, 1] = 255 11 info[i, j, 2] = 255 12cv2.imwrite('img/info.png', info)

恢复结果info.png

小结

这种信息隐藏的方法,主要是用『修改像素奇偶性后,图片变化不明显』来实现的,感觉非常巧妙。

不过值得注意的是,$隐写术\neq 加密$,这种信息隐藏的安全性也依赖于算法本身,而不是密码学里的『密钥』。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换

1.几何变换的基本概念  图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:1.原图像任意像素

LayoutLM——文本与布局的预训练用于文档图像理解

摘要:预训练技术近年来在多种NPL任务中取得了广泛的成功。尽管广泛的NPL应用的预训练模型,其大多聚焦于文本级别的操作,而忽略了布局与风格信息,这对文档图像的理解至关重要。该篇论文提出了LayoutLM来联合建模扫描文档图像的文本与布局信息关系,这将有益于真实世界中大量的图像理解任务,如文档图像的信息提取。此外,可以利用图像特征合并文字的视觉信息到