图片盲水印软件

bulid_watermark_gui

Blind&Invisible Watermark (图片盲水印,提取水印无须原图!) 增加图形界面
项目地址:github开源
软件下载地址:无需环境软件下载

how to use

pip install -r requirements.txt
运行main.py
选择 图片文件夹 水印文件夹 出图文件夹
点击开始

支持功能

1.批量操作支持多水印多图片
2.支持透明底图片
3.抗击多种破坏

缺陷

处理速度较慢
不支持中文路径(暂未处理)

软件主界面

image

图片水印提取需要使用数字信号处理中的相关算法和离散余弦变换等技术,通常需要使用C++等编程语言实现。以下是一个简单的C++实现示例: ```c++ #include <iostream> #include <cmath> using namespace std; const int N = 256; // 图像大小为256*256 const double delta = 0.05; // 水印强度 const double alpha = 0.5; // 水印嵌入参数 const int L = 8; // 离散余弦变换(DCT)系数个数 // 嵌入水印函数 void embed_watermark(double img[N][N], double watermark[L]) { double dct[N][N], idct[N][N]; // 存储DCT和IDCT结果 for (int i = 0; i < N; i += 8) { for (int j = 0; j < N; j += 8) { // 对8*8的块进行DCT变换 for (int u = i; u < i + 8; u++) { for (int v = j; v < j + 8; v++) { double sum = 0; for (int x = i; x < i + 8; x++) { for (int y = j; y < j + 8; y++) { sum += img[x][y] * cos((2 * (x - i) + 1) * M_PI * (u - i) / 16) * cos((2 * (y - j) + 1) * M_PI * (v - j) / 16); } } dct[u][v] = sum * ((u == i || v == j) ? 1 / sqrt(2) : 1) / 4; } } // 对DCT结果进行水印嵌入 for (int k = 0; k < L; k++) { int u = k / 8 + i, v = k % 8 + j; dct[u][v] += alpha * watermark[k]; } // 对DCT结果进行IDCT变换 for (int x = i; x < i + 8; x++) { for (int y = j; y < j + 8; y++) { double sum = 0; for (int u = i; u < i + 8; u++) { for (int v = j; v < j + 8; v++) { sum += (u == i || v == j ? 1 / sqrt(2) : 1) * dct[u][v] * cos((2 * (x - i) + 1) * M_PI * (u - i) / 16) * cos((2 * (y - j) + 1) * M_PI * (v - j) / 16); } } idct[x][y] = sum / 4; } } // 将IDCT结果存回原图像 for (int x = i; x < i + 8; x++) { for (int y = j; y < j + 8; y++) { img[x][y] = idct[x][y]; } } } } } // 提取水印函数 void extract_watermark(double img[N][N], double watermark[L]) { double dct[N][N], idct[N][N]; // 存储DCT和IDCT结果 for (int i = 0; i < N; i += 8) { for (int j = 0; j < N; j += 8) { // 对8*8的块进行DCT变换 for (int u = i; u < i + 8; u++) { for (int v = j; v < j + 8; v++) { double sum = 0; for (int x = i; x < i + 8; x++) { for (int y = j; y < j + 8; y++) { sum += img[x][y] * cos((2 * (x - i) + 1) * M_PI * (u - i) / 16) * cos((2 * (y - j) + 1) * M_PI * (v - j) / 16); } } dct[u][v] = sum * ((u == i || v == j) ? 1 / sqrt(2) : 1) / 4; } } // 提取嵌入的水印 for (int k = 0; k < L; k++) { int u = k / 8 + i, v = k % 8 + j; watermark[k] = (dct[u][v] - img[u][v]) / (alpha * delta); } } } } int main() { double img[N][N], watermark[L]; // 读取图像和水印 // ... // 嵌入水印 embed_watermark(img, watermark); // 保存含水印图像 // ... // 提取水印 extract_watermark(img, watermark); // 输出提取水印 for (int k = 0; k < L; k++) { cout << watermark[k] << " "; } cout << endl; return 0; } ``` 这是一个简单的离散余弦变换(DCT)实现,用于嵌入和提取水印。具体实现还需要读取图像和水印、保存含水印图像等操作,可以根据具体需要进行修改。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tbbei.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值