最近上了一门信息隐藏的课,讲的关于技术层面的内容还是蛮多的,但是我也没记住几个。吭吭,言归正传,这两天要交大作业,自己手动实现一种图像信息隐藏,查了一番资料后,决定Python来做(主要是调用包方便),原理很简单,主要利用修改图像RGB通道的某一通道值来隐藏二维信息。
简单的说,每一张图片上面的颜色都是由RGB数值组成,比如rgb 255 255 255就是白色,而rgb 0 0 0就是黑色,其他的颜色也由可以这三组数字表示。而在某一通道上对数值仅进行范围为1的修改时,由肉眼是看不出来区别的。而修改范围为1,最好的办法就是奇偶数了。可以将某一通道的值全部修改为奇数,然后将要修改的信息转化为黑白图像,然后将图像中黑色的位置(也就是文字)对应的载体图像进行改值,改为偶数,这样就可以在某一通道上隐藏信息了。不过我采用的是二维码,这样有个好处就是隐藏的信息多,而且方便加密。
话不多说,代码放上去。
import PIL
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
import cv2
import numpy as np
import qrcode
import os
def Encode(image2):
img = cv2.imread(image2)
out = np.zeros(img.shape, np.uint8)
w, h = img.shape[:2