Opencv实现盲水印技术(一)——构建Java工程

来源:互联网 发布:航迹规划算法 编辑:程序博客网 时间:2024/06/04 22:05

前言

这段时间比较火的阿里泄密事件已经告一段落,liu fuqiang在知乎上给出了很详细的解释,帖子中给出了相关理论和matlab代码。链接为:http://www.zhihu.com/question/50735753。过程大致如下:
打水印:先将原图片进行傅里叶变换到频域,加上水印后再通过傅里叶逆变换到空间域恢复图片
解水印:将打有水印的图片通过傅里叶变换到频域,提取出水印。
本文使用opencv实现了盲水印技术,构建了Java Web工程,将盲水印技术做成基础服务,可供整个安全系统调用。

Java工程加载opencv动态库

opencv是用C/C++实现的计算机视觉开源工具,其已经封装了Java接口,可以通过JNI技术进行调用。去opencv的官网下载对应的版本,本文用的是opencv3.0。解压后在build目录中可以找到opencv-300.jar和相应的不同架构动态库,windows下为dll文件,linux下为so文件。

Eclipse中需要在工程的Properties中按如下进行设置即可使用opencv。即加载jar包并设置native library location。


IntelliJ IDEA中打开Project Structure,按照如下设置即可。


应用opencv

使用opencv时,需要在代码中现实的加载库,使用System.loadLibrary加载。
import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;public class Main {static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) {Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);System.out.println(mat.dump());}}
上述代码中在静态代码块中加载了对应版本的类库,并生成了一个3x3的单位矩阵。运行结果如下:
[  1,   0,   0;   0,   1,   0;   0,   0,   1]

小结

本文介绍了opencv在java工程中应该如何加载和应用,接下来将介绍其在Java Web工程中如何动态加载。

0 0