zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Opencv学习笔记 - 频域手段添加盲水印

Opencv笔记学习 添加 水印 手段 频域
2023-09-14 09:01:35 时间

         频域添加数字水印的方法,是指通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。

        代码使用OpenCvSharp / c#实现

        添加水印:

// 读取图像并获取b通道
string filename = @"C:\Users\xiaomao\Desktop\123.png";
Mat origin = Cv2.ImRead(filename, ImreadModes.Color);
Mat[] arr = origin.Split();
Mat image = arr[0];

// 将输入图像扩大到最佳尺寸
Mat padded = new Mat();
int m = Cv2.GetOptimalDFTSize(image.Rows);
int n = Cv2.GetOptimalDFTSize(image.Cols);
Cv2.CopyMakeBorder(image, padded, 0, m - image.Rows, 0, n - image.Cols, BorderTypes.Constant, Scalar.All(0));

Mat temp = new Mat();
padded.ConvertTo(temp, MatType.CV_32F);
Mat[] planes = new Mat[] { temp, Mat.Zeros(padded.Size(), MatType.CV_32F) };
Mat complexImage = new Mat();
// 吧一个zeros通道和扩展通道合并在一起
Cv2.Merge(planes, complexImage);

// 进行傅里叶变换
Cv2.Dft(com