OpenCV环境搭建(Java)

前言:在网上看到好多的OpenCV的教程都是基于C和C++的,作为一个Java程序员表示深深的不服,遂研究了一番,写文以记之。

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

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

其次是编辑器的选择,在此还是推荐一下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这个目录文件是我们需要的,其他的暂时都不需要了。

二、第一个Java版的OpenCV程序

到此为止我们差不多就可以开始第一个Java版本的Opencv程序了。第一个程序我们将读取一张图片,OpenCV的logo如下图,然后将图片的信息使用Mat的格式打印出来。

                                                                                                                               

运行结果截图:

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


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

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

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

 

如果觉得上面的步骤太繁琐,那么你可以直接在github上clone我的代码,然后切换到day1分支上。

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

[java]  view plain  copy
  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方法,啊哦,程序抛出了一个异常:

[java]  view plain  copy
  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图像的基本信息。



PS:如果按照上面的步骤还是报错的话,建议可以将x64的文件路径按照绝对路径加入。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 上使用 OpenCV 的 VideoCapture,需要先在 Android Studio 中进行以下步骤: 1. 下载 OpenCV for Android,并解压到指定目录。 2. 在 Android Studio 中创建一个新的项目。 3. 在项目的 build.gradle 文件中添加 OpenCV 的依赖项: ``` dependencies { implementation project(':openCVLibrary') } ``` 4. 在项目的 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.CAMERA" /> ``` 5. 在项目的 MainActivity.java 文件中添加以下代码: ``` private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { // OpenCV loaded successfully // Now we can use OpenCV functions VideoCapture videoCapture = new VideoCapture(); videoCapture.open(0); // 0 for back camera, 1 for front camera break; } default: { super.onManagerConnected(status); break; } } } }; @Override protected void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mLoaderCallback); } ``` 这段代码首先创建了一个 BaseLoaderCallback 对象,然后在 onResume() 方法中调用了 OpenCVLoader.initAsync() 方法,以在后台加载 OpenCV 库。当加载完成后,会回调 BaseLoaderCallback 的 onManagerConnected() 方法,在该方法中可以使用 OpenCV 的函数。 在这里,我们创建了一个 VideoCapture 对象,并通过 open() 方法打开了相机。通过传递参数 0 或 1,可以选择使用后置摄像头或前置摄像头。 以上就是在 Android Studio 中搭建 OpenCV VideoCapture 环境的步骤。需要注意的是,由于 OpenCV for Android 本身比较大,所以在编译项目时可能会比较耗时。如果遇到编译失败的情况,可以尝试增加 Gradle 的内存限制(在项目的 gradle.properties 文件中添加 org.gradle.jvmargs=-Xmx3g)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值