使用Java開發OpenCV3程序-1.開發環境安裝與配置


  前言:在網上看到好多的OpenCV的教程都是基於C和C++的,而且一般都是OpenCV2.4版本的,而在OpenCV3版本中很多API變了,導致以前的程序不能復用,作為一個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我的代碼 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各個目錄的作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM