java 添加盲水印_图片加数字盲水印

article/2025/11/7 13:10:18

本文通过一个的实验,简要介绍频域手段添加数字盲水印的方法,并进一步验证其抗攻击性。在上述实验的基础上,总结躲避数字盲水印的方法。(多图预警)

本文分为五个部分,第一部分综述;第二部分频域数字盲水印制作原理介绍;第三部分盲水印攻击性实验;第四部分总结;第五部分附录(源代码)。

一、综述

本文提供的一种实现“阿里通过肉眼无法识别的标识码追踪员工”的技术手段。通过看其他答主的分析,阿里可能还没用到频域加水印的技术。

相对于空域方法,频域加盲水印的方法隐匿性更强,抵抗攻击能力更强。这类算法解水印困难,你不知道水印加在那个频段,而且受到攻击往往会破坏图像原本内容。本文简要科普通过频域手段添加数字盲水印。对于web,可以添加一个背景图片,来追踪截图者。

所谓盲水印,是指人感知不到的水印,包括看不到或听不见(没错,数字盲水印也能够用于音频)。其主要应用于音像作品、数字图书等,目的是,在不破坏原始作品的情况下,实现版权的防护与追踪。

添加数字盲水印的方法简单可分为空域方法和频域方法,这两种方法添加了冗余信息,但在编码和压缩情况不变的情况下,不会使原始图像大小产生变化(原来是10MB添加盲水印之后还是10MB)。

空域是指空间域,我们日常所见的图像就是空域。空域添加数字水印的方法是在空间域直接对图像操作(之所以说的这么绕,是因为不仅仅原图是空域,原图的差分等等也是空域),比如将水印直接叠加在图像上。

我们常说一个音有多高,这个音高是指频率;同样,图像灰度变化强烈的情况,也可以视为图像的频率。频域添加数字水印的方法,是指通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。

所谓对水印的攻击,是指破坏水印,包括涂抹,剪切,放缩,旋转,压缩,加噪,滤波等。数字盲水印不仅仅要敏捷性高(不被人抓到),也要防御性强(抗打)。就像Dota的敏捷英雄往往是脆皮,数字盲水印的隐匿性和鲁棒性是互斥的。(鲁棒性是抗攻击性的学术名字)

二、频域制作数字盲水印的方法

信号是有频率的,一个信号可以看做是无数个不同阶的正弦信号的的叠加。

57eec1506e894fc86955c2362fc39d42.png

上式为傅里叶变换公式,

56a05ee6db8de00d6f8044e72c3aa604.png是指时域信号(对于信号我们说时域,因为是与时间有关的,而图像我们往往说空域,与空间有关),

3f46e1e94b0fdbb232a0a2300e7cd586.png是指频率。想要对傅里叶变换有深入了解的同学,建议看一下《信号与系统》或者《数字信号处理》的教材,里面系统介绍了傅里叶变换、快速傅里叶变换、拉普拉斯变换、z变换等。

简而言之,我们有方法将时域信号转换成为频域,同样,我们也能将二维信号(图像)转换为频域。在上文中提到,图像的频率是指图像灰度变换的强烈情况。关于此方面更系统的知识,参见冈萨雷斯的《图像处理》。

下面以傅里叶变换为例,介绍通过频域给图像添加数字盲水印的方法。注意,因为图像是离散信号,我们实际用的是离散傅里叶变换,在本文采用的都是二维快速傅里叶变换,快速傅里叶变换与离散时间傅里叶变换等价,通过蝶型归并的手段,速度更快。下文中傅里叶变换均为二维快速傅里叶变换。

5ea17706c6737f6be0c0a8414e9f149f.png上图为叠加数字盲水印的基本流程。编码的目的有二,一是对水印加密,二控制水印能量的分布。以下是叠加数字盲水印的实验。

这是原图像,尺寸300*240 (不要问我为什么不用Lena,那是我前女友),

16267ecdf21b0fa70f17770fa968268f.png

之后进行傅里叶变换,下图变换后的频域图像,4b8807d9524d2fe13cf382feba509ed1.png

这是我想加的水印,尺寸200*100,5e460f2b4d1b0e81ad37858c2c50eaf6.png

这是我编码后的水印,编码方式采用随机序列编码,通过编码,水印分布到随机分布到各个频率,并且对水印进行了加密,617767473b9835e85c124559dff9939c.png

将上图与原图的频谱叠加,可见图像的频谱已经发生了巨大的变化,c8d611137a6907249e043585faa5231a.png

之后,将叠加水印的频谱进行傅里叶逆变换,得到叠加数字水印后的图像,4bafcfe4198b4d4d65224ba5ef6927a9.png

肉眼几乎看不出叠加水印后的图像与原图的差异,这样,数字盲水印已经叠加到图像中去。

实际上,我们是把水印以噪声的形式添加到原图像中。

下图是在空域上的加水印图与原图的残差(调整了对比度,不然残差调小看不见),cf6cfff9d1e8383e1a385421d7e89168.png

可以看出,实际上上述方法是通过频域添加冗余信息(像噪声一样)。这些噪声遍布全图,在空域上并不容易破坏。

最终,均方误差(MSE)为0.0244

信噪比(PSNR)为64.2dB

那么,为什么频谱发生了巨大的变化,而在空域却变化如此小呢?这是因为我们避开了图像的主要频率。下图是原图频谱竖过来的样子,其能量主要集中在低频。

63088758aaa5d0c2f567249e942ae58c.png水印提取是水印叠加的逆过程,023cc0f05559bc4ab0f4290df2d59a92.png

经提取后,我们得到如下水印,问:为什么水印要对称呢?嘿嘿,大家想想看。ce344d3e13d230d9e898e4fbef798cbf.png

三、攻击性实验

本部分进行攻击性实验,来验证通过频域手段叠加数字盲水印的鲁棒性。

1.进行涂抹攻击,这是攻击后的图片:c758f966673c52094fb0a1f3af2476d3.png

再进行水印提取:ed6ee565b1030192cf5e21c8162af493.png

2.进行剪切攻击,就是网上经常用的截图截取一部分的情况:ed8eab0bc73c9a35f6973c0547dab493.png

进行循环补全:99dda68c5a00cabea8080e1781f21032.png

提取水印:fee5f9440aaac4133e5cc41e1be51b86.png

3.伸缩攻击(这个实验明码做的,水印能量较高,隐匿性不强):8b3f9806e36e548b1fd565bf0d870f6f.png

提取水印(水印加的不好,混频挺严重的):b0fe275a17a364364b24a0849c5f5697.png

4.旋转攻击(明码):45da243292f2ed1fe786e0de93746011.png

提取水印:8e6dbb797032d1334dc2225bc15fd42b.png

5.JPEG压缩后(这个实验我好像是拿明码做的,能量主要加在了高频):3841e4526c5175b354ac1f35353f2679.png

提取结果:cc2abeff87c4b655d1d03c188d516ebf.png

6.PS 4像素马赛克/均值滤波等,攻击后图像(这是我女朋友吗?丑死了):5a823656c44e7aa455e6fe5a6e2970e7.png

提取水印后图像:d837a246846293e06441cd73818423f7.png

7.截屏,

截屏后我手动抠出要测试的图像区域,并且抽样或者插值到原图尺寸:8d91162a9a8d14c0380af91878e4deca.png

测试结果:6a4ffb34c440cc2ee627b4d0b7322c02.png

8. 亮度调节(明码):bd7e4a7a48618f314c4d9dbbbe56fa85.png

水印提取:1aed6f107556fc7397f43e46b21365b2.png

9.色相调节(明码):d776371a7556db1c61770dc890995e74.png

水印提取:5e1ab152da4e829e4bc4b27f0c6e95d2.png

10.饱和度调节(明码):45d9e0180557e980b7130b2f98ce1f6f.png

水印:a22b6523369224bdf2e7c471b5d43807.png

11.对比度(明码):ff40d9db45dd3597f448abf3c1026430.png

水印:95aec1f882366fd4bc417b81f698ee21.png

12.评论区用waifu2x去噪后图片:

f7a6485adddcaed2e5f1099afa69879f.png

解水印:1d5ef64ae8cb6800036aa02174bee0d9.png

13.美图秀秀,我对我女票一键美颜,美白,磨皮,加腮红,加唇彩(有一种很羞耻的感觉,捂脸):df8aebcedee6d32854c53b688a832fce.png

提取水印:c27b13c538a706a4d008e3aaa6001436.png

14.对于背景纯色的图其实也是无所谓的a0ae86941c498113e06168d233afd532.png能量系数为10时加水印图片:觉得太显噪就把能量系数调低,不过水印的隐秘性和鲁棒性是互斥的82ae373067982220828e52780d066288.png

最终提取出的水印:f37963c340ad95c78db69b47f938b891.png

15.我用将RGB>600的像素设置成为(0,255,0)来模拟PS魔术手,d427b7e3290e1e6ad9b37443d56d8fe5.png

提取水印为:867d6b038a555e31ef1de851011db5c1.png

16.屏摄,好吧,这个实验我做哭了

屏摄图:bde53e91496c1b5e1e05e59a49e0a5a5.png

实验结果:32bbd08e1942e3d6ad1dba1cb3650d05.png

我把水印能量系数调整到2000都没有用。

屏摄之后与原图信噪比为4dB左右,我用多抽样滤波的方式试过,滤不掉屏摄引入的噪声。屏摄不仅引入了椒盐噪声,乘性噪声,还有有规律的雪花纹理(摩尔纹)。

四、总结

基于频域的盲水印方法隐藏性强,鲁棒性高,能够抵御大部分攻击。但是,对于盲水印算法,鲁棒性和隐匿性是互斥的。

本文方法针对屏摄不行,我多次实验没有成功,哪位大神可以做一下或者讨论讨论。还有二值化不行,这是我想当然的,觉得肯定不行所以没做实验。其他的我试了试,用给出的方法调整一下能量系数都可以。

我想大家最关心的是什么最安全,不会被追踪。

不涉及图像的都安全,比如拿笔记下来。

涉及图像的屏摄最安全,

截屏十分不安全。

=====彩蛋====

e25e9f64fec26ac7586f05de3550f777.png

我在上图明码写入了信息。为了抵抗jpg压缩,我水印能量较高,并且因为没有编码,能量分布不均。图中规律性纹路,就是你懂的。嘿嘿,你懂的,解开看看吧。

五、附录

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

%%傅里叶变换加水印源代码%%运行环境Matlab2010a

clc;clear;close all;

alpha= 1;%%read data

im= double(imread('gl1.jpg'))/255;

mark= double(imread('watermark.jpg'))/255;

figure, imshow(im),title('original image');

figure, imshow(mark),title('watermark');%%encode mark

imsize=size(im);%random

TH=zeros(imsize(1)*0.5,imsize(2),imsize(3));

TH1=TH;

TH1(1:size(mark,1),1:size(mark,2),:) =mark;

M=randperm(0.5*imsize(1));

N=randperm(imsize(2));

save('encode.mat','M','N');for i=1:imsize(1)*0.5

for j=1:imsize(2)

TH(i,j,:)=TH1(M(i),N(j),:);

end

end%symmetric

mark_= zeros(imsize(1),imsize(2),imsize(3));

mark_(1:imsize(1)*0.5,1:imsize(2),:)=TH;for i=1:imsize(1)*0.5

for j=1:imsize(2)

mark_(imsize(1)+1-i,imsize(2)+1-j,:)=TH(i,j,:);

end

end

figure,imshow(mark_),title('encoded watermark');%imwrite(mark_,'encoded watermark.jpg');%%add watermark

FA=fft2(im);

figure,imshow(FA);title('spectrum of original image');

FB=FA+alpha*double(mark_);

figure,imshow(FB); title('spectrum of watermarked image');

FAO=ifft2(FB);

figure,imshow(FAO); title('watermarked image');%imwrite(uint8(FAO),'watermarked image.jpg');

RI= FAO-double(im);

figure,imshow(uint8(RI)); title('residual');%imwrite(uint8(RI),'residual.jpg');

xl= 1:imsize(2);

yl= 1:imsize(1);

[xx,yy]=meshgrid(xl,yl);

figure, plot3(xx,yy,FA(:,:,1).^2+FA(:,:,2).^2+FA(:,:,3).^2),title('spectrum of original image');

figure, plot3(xx,yy,FB(:,:,1).^2+FB(:,:,2).^2+FB(:,:,3).^2),title('spectrum of watermarked image');

figure, plot3(xx,yy,FB(:,:,1).^2+FB(:,:,2).^2+FB(:,:,3).^2-FA(:,:,1).^2+FA(:,:,2).^2+FA(:,:,3).^2),title('spectrum of watermark');%%extract watermark

FA2=fft2(FAO);

G=(FA2-FA)/alpha;

GG=G;for i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(M(i),N(j),:)=G(i,j,:);

end

endfor i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:);

end

end

figure,imshow(GG);title('extracted watermark');%imwrite(uint8(GG),'extracted watermark.jpg');%% MSE andPSNR

C=double(im);

RC=double(FAO);

MSE=0; PSNR=0;for i=1:imsize(1)for j=1:imsize(2)

MSE=MSE+(C(i,j)-RC(i,j)).^2;

end

end

MSE=MSE/360.^2;

PSNR=20*log10(255/sqrt(MSE));

MSE

PSNR%%attack test%%attack by smearing%A = double(imread('gl1.jpg'));%B = double(imread('attacked image.jpg'));

attack= 1-double(imread('attack.jpg'))/255;

figure,imshow(attack);

FAO_=FAO;for i=1:imsize(1)for j=1:imsize(2)if attack(i,j,1)+attack(i,j,2)+attack(i,j,3)>0.5FAO_(i,j,:)=attack(i,j,:);

end

end

end

figure,imshow(FAO_);%extract watermark

FA2=fft2(FAO_);

G=(FA2-FA)*2;

GG=G;for i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(M(i),N(j),:)=G(i,j,:);

end

endfor i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:);

end

end

figure,imshow(GG);title('extracted watermark');%%attack by cutting

s2= 0.8;

FAO_=FAO;

FAO_(:,s2*imsize(2)+1:imsize(2),:) = FAO_(:,1:int32((1-s2)*imsize(2)),:);

figure,imshow(FAO_);%extract watermark

FA2=fft2(FAO_);

G=(FA2-FA)*2;

GG=G;for i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(M(i),N(j),:)=G(i,j,:);

end

endfor i=1:imsize(1)*0.5

for j=1:imsize(2)

GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:);

end

end

figure,imshow(GG);title('extracted watermark');%%小波变换加水印,解水印大家按照加的思路逆过来就好

clc;clear;close all;%%read data

im= double(imread('gl1.jpg'))/255;

mark= double(imread('watermark.jpg'))/255;

figure, imshow(im),title('original image');

figure, imshow(mark),title('watermark');%%RGB division

im=double(im);

mark=double(mark);

imr=im(:,:,1);

markr=mark(:,:,1);

img=im(:,:,2);

markg=mark(:,:,2);

imb=im(:,:,3);

markb=mark(:,:,3);%%parameter

r=0.04;

g= 0.04;

b= 0.04;%% wavelet tranform andadd watermark% forred

[Cwr,Swr]=wavedec2(markr,1,'haar');

[Cr,Sr]=wavedec2(imr,2,'haar');%add watermark

Cr(1:size(Cwr,2)/16)=...

Cr(1:size(Cwr,2)/16)+r*Cwr(1:size(Cwr,2)/16);

k=0;while k<=size(Cr,2)/size(Cwr,2)-1Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+...

(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/4+...

k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+...

r*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2);

Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+...

(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/2+...

k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+...

r*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4);

Cr(1+3*size(Cwr,2)/4+k*size(Cwr,2)/4:3*size(Cwr,2)/4+...

(k+1)*size(Cwr,2)/4)=Cr(1+3*size(Cr,2)/4+...

k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+...

r*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2));

k=k+1;

end;

Cr(1:size(Cwr,2)/4)=Cr(1:size(Cwr,2)/4)+r*Cwr(1:size(Cwr,2)/4);% forgreen

[Cwg,Swg]=WAVEDEC2(markg,1,'haar');

[Cg,Sg]=WAVEDEC2(img,2,'haar');

Cg(1:size(Cwg,2)/16)=...

Cg(1:size(Cwg,2)/16)+g*Cwg(1:size(Cwg,2)/16);

k=0;while k<=size(Cg,2)/size(Cwg,2)-1Cg(1+size(Cg,2)/4+k*size(Cwg,2)/4:size(Cg,2)/4+...

(k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/4+...

k*size(Cwg,2)/4:size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+...

g*Cwg(1+size(Cwg,2)/4:size(Cwg,2)/2);

Cg(1+size(Cg,2)/2+k*size(Cwg,2)/4:size(Cg,2)/2+...

(k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/2+...

k*size(Cwg,2)/4:size(Cg,2)/2+(k+1)*size(Cwg,2)/4)+...

g*Cwg(1+size(Cwg,2)/2:3*size(Cwg,2)/4);

Cg(1+3*size(Cg,2)/4+k*size(Cwg,2)/4:3*size(Cg,2)/4+...

(k+1)*size(Cwg,2)/4)=Cg(1+3*size(Cg,2)/4+...

k*size(Cwg,2)/4:3*size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+...

g*Cwg(1+3*size(Cwg,2)/4:size(Cwg,2));

k=k+1;

end;

Cg(1:size(Cwg,2)/4)=Cg(1:size(Cwg,2)/4)+g*Cwg(1:size(Cwg,2)/4);% forblue

[Cwb,Swb]=WAVEDEC2(markb,1,'haar');

[Cb,Sb]=WAVEDEC2(imb,2,'haar');

Cb(1:size(Cwb,2)/16)+b*Cwb(1:size(Cwb,2)/16);

k=0;while k<=size(Cb,2)/size(Cwb,2)-1Cb(1+size(Cb,2)/4+k*size(Cwb,2)/4:size(Cb,2)/4+...

(k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/4+...

k*size(Cwb,2)/4:size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+...

g*Cwb(1+size(Cwb,2)/4:size(Cwb,2)/2);

Cb(1+size(Cb,2)/2+k*size(Cwb,2)/4:size(Cb,2)/2+...

(k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/2+...

k*size(Cwb,2)/4:size(Cb,2)/2+(k+1)*size(Cwb,2)/4)+...

b*Cwb(1+size(Cwb,2)/2:3*size(Cwb,2)/4);

Cb(1+3*size(Cb,2)/4+k*size(Cwb,2)/4:3*size(Cb,2)/4+...

(k+1)*size(Cwb,2)/4)=Cb(1+3*size(Cb,2)/4+...

k*size(Cwb,2)/4:3*size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+...

b*Cwb(1+3*size(Cwb,2)/4:size(Cwb,2));

k=k+1;

end;

Cb(1:size(Cwb,2)/4)=Cb(1:size(Cwb,2)/4)+b*Cwb(1:size(Cwb,2)/4);%%image reconstruction

imr=WAVEREC2(Cr,Sr,'haar');

img=WAVEREC2(Cg,Sg,'haar');

imb=WAVEREC2(Cb,Sb,'haar');

imsize=size(imr);

FAO=zeros(imsize(1),imsize(2),3);for i=1:imsize(1);for j=1:imsize(2);

FAO(i,j,1)=imr(i,j);

FAO(i,j,2)=img(i,j);

FAO(i,j,3)=imb(i,j);

end

end

figure, imshow(FAO); title('watermarked image');

View Code

======================================================

在知乎玩儿wargame也是有创意,不过师兄

你放种图就不应该了啊(大雾)。

解码思路大概是这样的:先找到原图,然后和原图在频域处理一下,就可以得到下面的**链接了

才怪嘞!师兄可是个守法的知乎青年。送给大家一个励志良言:

70bc0eb85ca51a2099979fd94b6b0e30.png

参考:

链接:https://www.zhihu.com/question/50735753/answer/122593277

链接:https://www.zhihu.com/question/50735753/answer/122898864


http://chatgpt.dhexx.cn/article/5Sj5E8w1.shtml

相关文章

使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!

文章目录 使用 Pillow 库为图片添加半透明水印使用 blind_watermark 库为图片添加盲水印安装嵌入水印提取水印 如何给图片添加水印呢&#xff1f;在 Python 的世界里&#xff0c;有多种方法可以为图片添加水印。 其中一种方法&#xff0c;可以使用大名鼎鼎 Pillow 库&#xff…

python 3.6 盲水印脚本安装说明

python 3.6 盲水印脚本安装说明 安装盲水印踩了不少坑&#xff0c;所以记录一下。 本机环境&#xff1a; windows10 python3.6 脚本安装地址&#xff1a; BlindWaterMark 下载解压即可 安装脚本的依赖库 opencv-python 4.2.0.34 matplotlib 2.1.1 安装命令&#xff1a; …

信息隐藏-图像盲水印实现

相关知识 目前水印大抵可分为两种&#xff0c;可见和不可见&#xff0c;可见水印大多用来标记或声明版权&#xff0c;或防盗用冒用&#xff0c;但在影院、绘画等场景下&#xff0c;可见性水印会极大影响用户体验&#xff0c;所以产生了盲水印的概念。 盲水印即看不见的水印&am…

Python给图片添加盲水印

文章目录 简介安装初试遇到的坑参考文献 简介 盲水印就是图片有水印但人眼看不出来&#xff0c;需要通过程序才能提取水印&#xff0c;相当于隐形“盖章”&#xff0c;可以用在数据泄露溯源、版权保护等场景。 该库出自阿里巴巴安全团队&#xff0c;强大之处&#xff1a; 解…

Opencv实现盲水印技术(三)——傅里叶变换算法及盲水印实现

前言 之前的文章中&#xff0c;介绍了如何构建Java工程和Java Web工程&#xff0c;本文将简单介绍对傅里叶变换的理解&#xff0c;以及使用opencv实现盲水印。关于傅里叶变换&#xff0c;有篇博文介绍的很详细&#xff0c;链接地址为&#xff1a;看了此文你还不了解傅里叶变换&…

双图+盲水印

1.双图 打开压缩包&#xff0c;发现有两张图片 first1和second.png&#xff0c;使用Stegsolve打开first1.png进行一次异或处理 然后分析选择结合second.png得到 用stegslove对二维码进行运算得到三张二维码 扫描结果是DES 6XaMMbM7 和一长串字符&#xff0c;很显然是des加密&a…

Python 数字图片盲水印

blind-watermark 基于傅里叶变换的数字盲水印 文档&#xff1a; https://BlindWatermark.github.io/blind_watermark/#/zh/Source code: https://github.com/guofei9987/blind_watermark install pip install blind-watermarkFor the current developer version: git clon…

watermark前端js盲水印添加方法

1,引入js <script src"/Public/js/watermark-dom/watermark.js" language"JavaScript"></script> 2,实例化对象 <script language"JavaScript"> //参数详情请参考watermark.js 文件里的说明 window.onload function(){wate…

给你的web页面添加盲水印,附带检盲水印方案

应用场景 在一些敏感系统有的时候我们为了防止别人截图或追溯图片源头是谁发的。我们需要在页面上埋下我们的隐形水印。 开始做 埋水印 github上有很多水印的js插件&#xff0c;download下来一个改一改&#xff0c;源码见最后附录。 改动内容&#xff1a;增加了判断dom被人…

有意思的数字盲水印的简单的实现。

早期大约是10年前从一本数字图像处理上看到过数字水印的概念&#xff0c;觉得确实一种很有意思的东西&#xff0c;那个时候主要就是基于LSB的图像信息的隐藏&#xff0c;这种在空域里的方法有较大的缺陷&#xff0c;鲁棒性是比较差的。随便一个后期的都会造成水印的丢失&#x…

python脚本实现盲水印提取和添加

python脚本实现盲水印提取和添加 首先github上找个BlindWaterMark-master文件下载一下&#xff0c;打开后是我这个样子 在python里面添加两个库&#xff0c;python.exe目录上方输入cmd pip install opencv-python python.exe -m pip install matplotlib新手这里装库的时候&am…

文字隐写术-盲水印研究笔记

gitee 开源代码(java) shuiyin: blind watermark 盲水印技术实现 java 实现版权保护 - Gitee.comhttps://gitee.com/chejiangyi/shuiyin/tree/master 需求概述 研究盲水印对于版权保护的效果和能力 研究尝试概述 水印实现: 大部分的python或者java算法都基于频域的盲水印效果…

web系统添加盲水印

前言 为增加系统安全性&#xff0c;避免重要敏感信息通过截图方式泄露&#xff0c;对web页面增加盲水印标识&#xff0c;标注系统名称&#xff0c;登陆人&#xff0c;当前时间等信息&#xff0c;这里的盲水印指肉眼不可见的html水印 增加水印 引入watermark.js调用 watermar…

【OpenCV 例程 300篇】219. 添加数字水印(盲水印)

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程 300篇】219. 添加数字水印&#xff08;盲水印&#xff09; 8.2 添加数字盲水印 数字水印&#xff0c;是指将特征信息嵌入音频、图像或是视频等数字信号中。 数字水印分为明水印和盲水印&#xff08;blind watermark&#…

照片里的盲水印

这个题是安恒月赛里面的一道misc类型的题&#xff0c;在CTF中misc所谓最考验你的脑洞和检验你的赛事水平&#xff08;赛棍&#xff1f;&#xff1f;&#xff1f;&#xff09; 但是这个方面还是要看一下&#xff0c;就当做开发脑力了。 题目&#xff1a;暴力可解 题目文件 下载…

[python] 基于blind-watermark库添加图片盲水印

blind-watermark是一个能够给图片添加/解析基于频域的数字盲水印的Python库。图像水印image watermark是指在图片里添加文本或图形&#xff0c;以标记图片的来源。但是图像水印会破坏原图。因此另外一种水印形式&#xff0c;即图像盲水印blind image watermark在实践中更多地用…

图片盲水印软件

bulid_watermark_gui Blind&Invisible Watermark &#xff08;图片盲水印&#xff0c;提取水印无须原图&#xff01;) 增加图形界面 项目地址&#xff1a;github开源 软件下载地址&#xff1a;无需环境软件下载 how to use pip install -r requirements.txt 运行main.py…

隐写术(盲水印):从入门到出门

0. 前言 我在做 Blind Watermark 这个库的时候&#xff0c;翻阅了大量材料&#xff0c;学到了关于隐写术、盲水印的很多知识&#xff0c;现在梳理了一遍&#xff0c;发出来。 本文结构&#xff1a; 简介&#xff1a;隐写术的应用场景、分类、特点隐写术&#xff1a;介绍几种…

图片隐写,盲水印,加密logo

1.定义 隐写术算是一种加密技术&#xff0c;权威的 wiki 说法是“ 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。” example&#xff1a; 钱图&#xff08;钱上面的水印&#xff0…

CTF盲水印详解

原创稿件征集 邮箱&#xff1a;eduantvsion.com QQ&#xff1a;3200599554 黑客极客技术、信息安全热点安全研究分析等安全相关的技术文章 稿件通过并发布还能收获 200-800元不等的稿酬 前言 在CTF杂项题型中&#xff0c;盲水印的出现频率是相当高的&#xff0c;但大多数人处于…