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

前言

之前的文章中,介绍了如何构建Java工程和Java Web工程,本文将简单介绍对傅里叶变换的理解,以及使用opencv实现盲水印。关于傅里叶变换,有篇博文介绍的很详细,链接地址为:看了此文你还不了解傅里叶变换,你就过来掐死我吧!

对图像傅里叶变换的理解

对图像进行傅里叶变换,起始是一个二维离散傅里叶变换,图像的频率是指图像灰度变换的强烈程度,将二维图像由空间域变为频域后,图像上的每个点的值都变成了复数,也就是所谓的复频域,通过复数的实部和虚部,可以计算出幅值和相位,计算幅值即对复数取模值,将取模值后的矩阵显示出来,即为其频谱图。但是问题来了,复数取模后,数字有可能变的很大,远大于255,如果数据超过255,则在显示图像的时候会都当做255来处理,图像就成了全白色。因此,一般会对模值再取对数,在在0~255的范围内进行归一化,这样才能够准确的反映到图像上,发现数据之间的差别,区分高频和低频分量,这也是进行傅里叶变换的意义。

opencv实现盲水印

废话不多说,先上代码。
public class DFTUtil {
	private static List<Mat> planes;
	private static Mat complexImage;
	
	private DFTUtil(){}
	private static final DFTUtil dftUtil = new DFTUtil();

	public static DFTUtil getInstance () {
		planes = new ArrayList<>();
		complexImage = new Mat();
		return dftUtil;
	}
	
	public Mat transformImage(Mat image) {
		// planes数组中存的通道数若开始不为空,需清空.
		if (!planes.isEmpty()) {
			planes.clear();
		}
		// optimize the dimension of the loaded image
		Mat padded = this.optimizeImageDim(image);
		padded.convertTo(padded
  • 18
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 58
    评论
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值