使用Java开发OpenCV3程序-1.开发环境安装与配置

  前言:在网上看到好多的OpenCV的教程都是基于C和C++的,并且通常都是OpenCV2.4版本的,而在OpenCV3版本中不少API变了,致使之前的程序不能复用,做为一个Java程序员表示深深的不服,遂研究了一番,写文以记之。java

1、下载和安装所需的开发环境

  使用Java开发程序,固然必不可少的天然是JDK了,关于JDK的安装和环境变量的配置在此再也不啰嗦,相信你本地也早已安装好了,本文使用的是JDK1.八、Windows64位开发环境,其余环境暂时没有测试,但理论上应该都是可行的。git

  其次是编辑器的选择,在此仍是推荐一下Idea,若是你是Java程序员,必定据说过,若是你是安卓开发者,那你更应该据说,Android Studio就是基于Idea的社区版开发的。扯远了,我这里用的是Idea的最新版 Idea 2016.1 下载IntelliJ IDEA 2016。全平台支持,无论你是Windows仍是Mac或者Linux。安装过程也更普通的软件没什么差异。安装好以后建议写个”Hello World"小程序测试一下,若是不成功建议到网上搜索一下安装过程。程序员

  下面到最重要的OpenCV登场了。目前OpenCV的最新版本是3.1.0,因此后面都是基于OpenCV3.1.0的。使用Java开发程序不像Visual Studio那么复杂的环境配置,由于Java是直接调用OpenCV的jar包中的方法。到OpenCV主页下载相应平台的压缩包(虽然是.exe,聪明的你确定会发现就是个压缩包)。下载完成后解压,咱们找到这样一个目录:opencv->build->java 注意java这个目录文件是咱们须要的,其余的暂时都不须要了。github

 

2、第一个Java版的OpenCV程序

  到此为止咱们差很少就能够开始第一个Java版本的Opencv程序了。第一个程序咱们将读取一张图片,OpenCV的logo以下图,而后将图片的信息使用Mat的格式打印出来。小程序

                                                                

  运行结果截图:windows

  首先咱们创建一个maven工程,Java开发的应该都知道maven吧,由于该项目都是基于maven和git(后面会提到)来管理的。启动Idea,选择"Create New Project",在弹出的界面左侧边栏选择"maven",若是你已经使用Idea测试过"Hello World"程序,那么JDK应该已经设置好了,若是没有,你须要在右边栏上"Project SDK"选择你在本地安装的JDK。界面如图:app

  接着点击"Next"下一步操做,设置maven项目的GroupId和ArtifactId,这里我填的是"GroupId:com.superbool","ArtifactId:easy_opencv",而后点击"Next"设置项目的名称和保存的位置,“Project name:easy_opecv","Project location:D:\github\easy_opencv",而后点击"Finish"就完成了maven项目的建立,之后的代码都是写在该项目中的,就不用再新建工程了。固然,这里的命名和保存的路径等均可以本身修改的。maven

  在开始第一个程序以前还得建立几个目录,咱们在easy_opencv项目的父目录下建立一个opencv目录,而后将以前解压的OpenCV中的build_>java目录下的内容拷贝过来。而后在src->main->java目录下建立咱们第一个类FirstOpenCV.java。编辑器

  建立好的maven工程以下图所示(也能够手动建立这些目录,关于每一个目录的做用,在下一篇会作详细解释):ide

                      

  若是以为上面的步骤太繁琐,那么你能够直接在github上clone个人代码 easy_opencv,而后切换到day1分支上。

  终于要开始写代码了,第一个基于Java的OpenCV的代码:

 

 1 public class FirstOpenCV {
 2     static {
 3         System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 4         //注意程序运行的时候须要在VM option添加该行 指明opencv的dll文件所在路径
 5         //-Djava.library.path=$PROJECT_DIR$\opencv\x64
 6     }
 7 
 8     public static void main(String[] args) {
 9         Mat mat = Imgcodecs.imread("C:/opencv.png");
10         System.out.println(mat);
11     }
12 }

 

  等等,"Core.NATIVE_LIBRARY_NAME"以及"Imgcodecs.imread()"方法都标红了,原来是opencv的jar包还没引用进来,因此还得一步操做,导OpenCV的jar包,点击下图的左上角红框标识的图标,弹出"Project Structure"选项界面,依次选择"Modules"->"Dependencies"->"+"->"1 JARs or Dependencies..."选中刚opencv目录下的"opencv-310.jar",再看代码是否是飘红的线都不见了呢。

  而后使用Ctr+Shift+F10快捷键运行第一个main方法,啊哦,程序抛出了一个异常:

 1 Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
 2     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
 3     at java.lang.Runtime.loadLibrary0(Runtime.java:870)
 4     at java.lang.System.loadLibrary(System.java:1122)
 5     at com.superbool.FirstOpenCV.<clinit>(FirstOpenCV.java:12)
 6     at java.lang.Class.forName0(Native Method)
 7     at java.lang.Class.forName(Class.java:264)
 8     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
 9 
10 Process finished with exit code 1

 

  因为程序Java程序是调用的本地OpenCV的动态连接库的,因此在这里运行的时候JVM找不到.dll文件的位置,天然就报错了,解决办法也很简单,点击如图中的方框"FirstOpenCV"->"Edit Configurations" 弹出以下的界面,在"VM options"一栏中添加"-Djava.library.path=\$PROJECT_DIRS\$\opencv\x64"(注意美圆符前面没有斜杠),若是是32位系统请填"\x32"。

  再使用Ctr+Shift+F10快捷键运行程序,是否是结果终于出来了呢,这里只打印了读取的mat图像的基本信息。

  不过因为OpenCV官方的jar包还没提供像C++同样的highgui接口,因此暂时还没法将Mat图片显示在界面上,之,不过在下一节咱们将会本身写一个方法来显示这个mat图像,同时解释一下maven各个目录的做用。

相关文章
相关标签/搜索