OpenCV4入门教程045:图片添加(盲)水印
索引地址:系列索引
上一篇:OpenCV4入门教程044:DFT(离散傅利叶变换)
DFT具体介绍:DFT
水印
普通的水印就是在原始图片上添加文字、图像来表示所有权。
但是这类水印可以通过打马赛克、图片截取的方式规避。
那么实现就简单一点,使用Qt读取图片,然后在图片上绘制文字即可。
1 |
|
使用类包装接口,动态修改字体大小、水印内容、水印位置、水印框
带水印框效果(水印框没有什么用,只是用来矫正效果)
盲水印
盲水印,即不可见水印,使用算法将水印信息嵌入图片中。
就算图片二次修改、截取、破坏,水印信息也可以完整恢复出来。
要求
水印要求在以下操作后还能恢复:
- 涂抹、椒盐、模糊
- 亮度
- 对比度
- 截取、横向裁剪、纵向裁剪
- 旋转
- 缩放
- 格式转换、jpg压缩
- 截图
- 拍照
LSB法
LSB(Least Signifcant Bit,最低有效位)
1 |
|
最低有效位为01100001 = 0x61 = A
这样我们就把字母A藏到了图片数据里。
如果图片被截取、拍照,那么数据就丢失了。
DFT(离散傅里叶变换)
在OpenCV4入门教程044:DFT(离散傅利叶变换)中介绍过DFT。
原理是:
- 将图片进行傅里叶变换,得到表示四向限灰度情况的灰度图
- 在灰度图上添加文字、图片
- 将灰度图变换为正常图
解析水印的原理就是
- 将图片解析傅里叶变换,就可以得到灰度图,此灰度图上包含水印
添加水印
1 |
|
结果和原图没什么变换。
解水印
1 |
|
这一步最重要,要可以从添加水印的图片结果中提取出水印,否则就没有意义了
频域变换法
离散余弦变换(Discrete Cosine Transform,DCT)
离散小波变换(Discrete Wavelet Transform,DWT)
字形变换法
patchwork
基于神经网络的算法
OpenCV4入门教程045:图片添加(盲)水印
https://blog.jackeylea.com/opencv/opencv-blind-watermark/