机器学习第3章第8节 : 文字信息加密到图片及解密

机器学习第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()

运行结果(加密)

源图像

messageImg

载体图像

baseImg

处理后的图像

secretImg


解密


思路

解密信息是隐藏信息的逆过程,提取载体文件中蓝色像素值为奇数的像素点,将空白图像中的这些像素点对应的位置赋予统一的着色


代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
showHideMessage.py

在之前的信息隐藏后,肉眼观察载体图像,仍无法察觉与之前相比有任何变化.
解密信息与隐藏信息相反,是隐藏信息的逆过程
图像隐藏信息解密原理:
    提取载体文件中蓝色像素值为奇数的像素点
@author: Oscar
"""

import cv2
import numpy as np

fn = "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()

运行结果(解密)

加密后的图片

secretImg

解密后的图片

showMessage


笔记

在这里,解密后的图片是黑色背景的原因是使用了numpy.zeros()产生的图像矩阵是BGR(0,0,0),所以背景是黑色.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python机器学习编程与实战第8章《通信运营商客户流失分析与预测》介绍了如何使用Python进行通信运营商客户流失的分析和预测。 该章主要分为以下几个部分: 1. 数据预处理:通过对客户数据进行清洗和处理,包括处理缺失值、异常值和重复值等,使数据能够被正确地应用于机器学习模型。 2. 特征工程:根据业务需求和问题目标,构建合适的特征集。通过使用Python的特征选择技术和特征工程方法,选择和构建与客户流失相关的特征。 3. 数据可视化和探索性分析:使用Python的数据分析和可视化工具,如matplotlib和seaborn等,对客户数据进行可视化和探索性分析。可以通过可视化手段来发现数据的分布情况、相关性等,为后续建模做准备。 4. 模型建立与评估:使用Python的机器学习算法对客户数据进行建模和预测。常用的模型包括逻辑回归、决策树、随机森林等。通过交叉验证等技术对模型进行评估和选择,找出预测准确率较高的模型。 5. 模型调优和部署:对选定的机器学习模型进行参数调优和特征选择,以提高模型的预测性能。最后,将优化后的模型进行部署,以便在实际业务环境中进行客户流失的预测和应用。 该章的案例实战主要围绕通信运营商的客户流失问题展开,通过对数据的分析和建模,帮助运营商提前预测和识别可能流失的客户,从而采取相应措施进行客户保持和挽留,提高运营商的业务效益。 通过本章的学习,读者可以了解到如何使用Python进行客户流失分析和预测,同时对数据处理、特征工程、模型建立和评估等关键环有一定的了解和实践经验。这对于从事数据分析和挖掘工作的人员和相关从业者具有重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值