第一部分:
Steganography.py
隐写方法代码块
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import click
from PIL import Image
import numpy as np
import cv2
def int_to_bin(rgb):
r=rgb[0]
g=rgb[1]
b=rgb[2]
return ('{0:08b}'.format(r),
'{0:08b}'.format(g),
'{0:08b}'.format(b))
def bin_to_int(rgb):
#将字符串元组转换为整数元组
r,g,b=rgb
return [int(r, 2),
int(g, 2),
int(b, 2)]
def merge_rgb(rgb1, rgb2):
#合并两个RGB元组
r1, g1, b1 = rgb1
r2, g2, b2 = rgb2
rgb = (r1[:4] + r2[:4],
g1[:4] + g2[:4],
b1[:4] + b2[:4])
return rgb
def merge(img1, img2):
#合并2个图像
#检查图像1>图像2?
if img2.shape[0] > img1.shape[0] or img2.shape[1] > img1.shape[1]:
raise ValueError('Image 2 should not be larger than Image 1!')
#创建新的已合并图像
new_image = np.zeros(img1.shape, np.uint8)
for i in range(img1.shape[0]):
for j in range(img1.shape[1]):
rgb1 = int_to_bin(img1[i, j])
#使用黑色像素0作为默认值
rgb2 = int_to_bin([0,0,0])
#检查像素贴图位置是否对img2有效 check if the pixel map position is valid for img2
if i < img2.shape[0] and j < img2.shape[1]:
rgb2 = int_to_bin(img2[i, j])
#合并两个像素并将其转换为整数元组 merge the two pixels and convert it to a integer tuple
rgb = merge_rgb(rgb1, rgb2)
new_image[i, j] = bin_to_int(rgb)
print("隐写图像成功!!!")
return new_image
def unmerge(img):
#create the new image
new_image = np.zeros(img.shape, np.uint8)
#list used to store the image original size
original_size = img.shape[:2]
for i in range(img.shape[0]):
for j in range(img.shape[1]):
#get RGB from the current pixel
r, g, b = int_to_bin(img[i, j])
#extract the last 4 bits
#concatenate 4 zero bits
rgb = (r[4:] + '0000',
g[4:] + '0000',
b[4:] + '0000')
#convert it to an integer array with r,g,b values
new_image[i, j] = bin_to_int(rgb)
#if valid store as the last valid position
if new_image[i, j][0]!=0 and new_image[i, j][1]!=0 and new_image[i, j][2]!=0:
original_size = [i + 1, j + 1]
#crop the image based on valid pixels
crop_img = new_image[0: original_size[0], 0: + original_size[1]]
print("Hidden image extracted successfully...")
return crop_img
第二部分:
Encode.py
秘密图像隐写实现
from PIL import Image
import Steganography as st
import cv2
img1=cv2.imread('img1.jpg',1)
img2=cv2.imread('img2.jpg',1)
img1=cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2=cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
output_image=st.merge(img1,img2)
cv2.imwrite('result/merged_image1.png',output_image)
第三部分:
Decode.py
隐写图像获得秘密图像
from PIL import Image
import Steganography as st
import cv2
img=cv2.imread('result/merged_image1.png',1)
img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
hid_image=st.unmerge(img)
cv2.imwrite('result/secret_image2.png',hid_image)
效果演示:
img1:
img2:
隐写结果:
觉得不错的话,点个赞呗!
版权声明:本文为qq_48951688原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。