当前位置: 首页 > news >正文

QT实现图片隐写术

图片隐写术QT

  • 实现代码如下:
    • mainwindow.h
    • mainwindow.cpp
    • 源码地址
  • 三、图片隐写术种类
      • 1. 最低有效位(LSB, Least Significant Bit)隐写法
      • 2. 频域隐写法
      • 3. 颜色模型隐写法
      • 4. 基于深度学习的隐写方法
      • 5. 拼合隐写法
      • 6. 扭曲隐写法
      • 7. 其他隐写方法

图片隐写其实就是将图片和文件和并在一张图片里面。
在window操作系统中我们可以使用以下命令生成图片二。
将2.jpg已图片打开可以打开看到图片,将2.jpg修改后缀2.zip。又能以压缩包的方式打开压缩包。

copy /b  1.jpg+1.zip D:\\2.jpg

我们使用QT制作以下这个小功能。简单说来就是合并两个二进制文件,将两个文件分别合并成一个文件就可以了。这个东西可以做啥呢?大概就是想传一个压缩包,但是不想让别人知道,然后穿了一个图片。别人以为是图片其实这个图片内涵很多东西。

实现代码如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
private:void initUI();void initConnect();QPushButton *btnSelectPic;QPushButton *btnSelectArchive;QLabel *labSelectPic;QLabel *labSelectArchive;QLineEdit *edtSelectPic;QLineEdit *edtSelectArchive;QPushButton *btnDoWork;
public slots:void slotSelectPic();void slotSelectArchive();void slotDoWork();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), btnSelectPic(new QPushButton(QStringLiteral("选择图片"))), btnSelectArchive(new QPushButton(QStringLiteral("选择图片"))), labSelectPic(new QLabel(QStringLiteral("图片:"))), labSelectArchive(new QLabel(QStringLiteral("压缩包:"))), edtSelectPic(new QLineEdit()), edtSelectArchive(new QLineEdit()), btnDoWork(new QPushButton(QStringLiteral("生成")))
{initUI();initConnect();
}MainWindow::~MainWindow() {}void MainWindow::initUI()
{QWidget *wdgMain = new QWidget();QHBoxLayout *layoutPic = new QHBoxLayout();QHBoxLayout *layoutArchive = new QHBoxLayout();QVBoxLayout * layoutMain = new QVBoxLayout();edtSelectPic->setDisabled(true);edtSelectArchive->setDisabled(true);layoutPic->addWidget(labSelectPic);layoutPic->addWidget(edtSelectPic);layoutPic->addWidget(btnSelectPic);layoutArchive->addWidget(labSelectArchive);layoutArchive->addWidget(edtSelectArchive);layoutArchive->addWidget(btnSelectArchive);layoutMain->addLayout(layoutPic);layoutMain->addLayout(layoutArchive);layoutMain->addWidget(btnDoWork);wdgMain->setLayout(layoutMain);setCentralWidget(wdgMain);
}void MainWindow::initConnect()
{connect(btnSelectPic,&QPushButton::clicked,this,&MainWindow::slotSelectPic);connect(btnSelectArchive,&QPushButton::clicked,this,&MainWindow::slotSelectArchive);connect(btnDoWork,&QPushButton::clicked,this,&MainWindow::slotDoWork);
}void MainWindow::slotSelectPic()
{QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("JPG Files (*.jpg);;All Files (*)"));edtSelectPic->setText(fileName);
}void MainWindow::slotSelectArchive()
{QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("zip Files (*.zip);;All Files (*)"));edtSelectArchive->setText(fileName);
}void MainWindow::slotDoWork()
{QString picNamePath = edtSelectPic->text();QString ArchiveNamePath = edtSelectArchive->text();QFile outFile("out");QFile ArchiveFile(ArchiveNamePath);QFile picFile(picNamePath);if (picFile.open(QIODevice::ReadOnly ) && outFile.open(QIODevice::WriteOnly | QIODevice::Unbuffered) && ArchiveFile.open(QIODevice::ReadOnly)) {QByteArray picData = picFile.readAll();QByteArray archiveData = ArchiveFile.readAll();outFile.write(picData) ;outFile.write(archiveData);}outFile.close();ArchiveFile.close();picFile.close();
}

源码地址

在这里插入图片描述

https://gitcode.net/arv002/qt/-/tree/master/ImageSteganography

三、图片隐写术种类

1. 最低有效位(LSB, Least Significant Bit)隐写法

  • 原理:通过修改图像像素的最低有效位来嵌入数据。由于人类视觉系统对细微的颜色差异不敏感,因此这种方法能够隐蔽地嵌入少量的数据而不易察觉。
  • 特点:简单且计算开销低,但隐蔽性较差,容易被检测到。

2. 频域隐写法

  • 原理:将图像从空间域转换到频域,通过改变图像的频率成分来隐藏数据。常用的技术有离散傅里叶变换(DFT)、离散余弦变换(DCT)和离散小波变换(DWT)。
  • 特点:隐蔽性较高,但实现较为复杂。信息不是直接以像素强度隐藏在图像中,而是隐藏在像素系数中,通常用于JPEG等格式的图像。

3. 颜色模型隐写法

  • 原理:利用图像的颜色模型(如RGB、HSV等)的特性来隐藏信息。例如,在RGB颜色模型中,可以通过调整颜色分量的值来嵌入数据。
  • 特点:具体实现方式多样,隐蔽性和鲁棒性取决于具体的算法设计。

4. 基于深度学习的隐写方法

  • 原理:利用深度学习模型(如生成对抗网络GAN)来生成含密图像。这些模型能够学习如何将秘密信息嵌入到图像中,同时保持图像的视觉质量。
  • 特点:隐写内容丰富,隐写容量大,且能够抵抗一些传统的隐写分析方法。然而,深度学习模型的复杂性和训练成本也较高。

5. 拼合隐写法

  • 原理:通过将多个图像或图像的一部分拼接在一起来隐藏信息。这种方法可以通过调整拼接区域的像素值来嵌入秘密信息。
  • 特点:隐蔽性较高,但需要确保拼接后的图像在视觉上保持连贯性。

6. 扭曲隐写法

  • 原理:通过轻微地扭曲图像的某些部分来隐藏信息。这种扭曲可以是几何变换(如旋转、缩放)或像素值的变化。
  • 特点:能够在不影响图像整体视觉效果的情况下隐藏信息,但需要对扭曲参数进行精细控制。

7. 其他隐写方法

  • 还包括但不限于利用图像的纹理、边缘、亮度等特性来隐藏信息的方法。这些方法通常需要根据图像的具体内容和特点来设计相应的算法。

总之,图片隐写技术多种多样,每种技术都有其独特的优势和局限性。在实际应用中,需要根据具体需求和场景选择合适的隐写方法,并权衡隐蔽性、鲁棒性和嵌入容量等因素。


http://www.mrgr.cn/news/36440.html

相关文章:

  • MySQL --索引(下)
  • 解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题
  • 未来之窗VOS编程工具让你的工作效率翻倍———未来之窗行业应用跨平台架构
  • 如何搭建Vue脚手架
  • AI-Talk开发板之wifi scan
  • vue路由的基本使用
  • 134. 加油站
  • 技能深化与软实力双提升
  • 服务端的 Session 详解
  • 【操作系统】速成3
  • 2024免费录屏软件的宝藏功能与实用技巧
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于CAN总线的气动控制(中)
  • SBB Usage Parameters
  • Android 10.0 Launcher3禁止改变density等系统密度导致布局变化hotseat靠右边显示功能实现
  • Ubuntu下TexMaker发生CTeX fontset `fandol‘ is unavailable问题
  • Delphi 12.2 新出的 WebStencil 组件和 Quill 编辑器配合的问题
  • 四元组问题
  • LeetCode 1979. 找出数组的最大公约数
  • 数据分析:Python语言网络图绘制
  • 【QGIS】软件下载安装及GIS4WRF插件使用