我們都知道,OpenCV是基於C++的開源計算機視覺庫,但是從2.4.4版本開始提供了Java綁定,也就是說,我們也可以使用Java來開發基於OpenCV的計算機視覺應用。目前,最新的版本是3.1.0,在本文中將會介紹如何中Ubuntu 16.04上搭建OpenCV for Java的開發環境,假設目前使用的是剛剛重裝的Linux操作系統。
1. 配置Java環境
在生成OpenCV的Makefile之前,cmake工具會檢查當前系統中是否已經配置好了Java環境,以決定是否會生成Java開發相應的包。因此,我們首先要確認當前系統已經配置好了Java的開發環境,這一部分內容不屬於本文的重點,請參看其他文章。
2. 安裝編譯依賴包
在Linux下編譯OpenCV需要依賴很多軟件包,這些包對於以後進行計算機視覺應用時也需要使用。在Ubuntu下,可以直接使用apt-get工具輕松完成,對應的命令如下:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libttb2 libttb-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libdc1394-22-dev ant
3. 解壓opencv-3.1.0源碼包
由於源碼包的來源不同,壓縮包的格式可能也會有所不同,主要有zip和tgz兩種格式,可以分別用unzip和tar命令來解壓,這裡不再詳細說明。本文中解壓出來的文件夾頂層目錄名稱為:
opencv-3.1.0
4. 創建編譯輸出文件夾
為了防止編譯的時候破壞opencv源碼包的目錄結構,一般都不推薦直接在源碼包的頂級目錄下執行源碼的編譯工作,通常是在該目錄下面單獨創建一個build文件夾,所有的編譯中間文件和最終的目標文件都輸出到這個文件中,過程如下:
cd opencv-3.1.0 mkdir build cd build
5. 生成Makefile文件
首先請確認當前的工作目錄為build文件夾,然後需要利用cmake工具來生成編譯整個工程的Makefile文件,執行的命令如下:
cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../
但是,很不幸的是很大可能性此過程並不能成功,而是會因為在下載ippicv_linux_20151201.tgz第三方包的時候超時而生成Makefile失敗。解決辦法是從參考資料[1]提供的鏈接中下載此源碼包,然後將其拷貝到opencv源碼包的同級目錄下,然後執行下面的命令:
ipp_file=../ippicv_linux_20151201.tgz && ipp_hash=$(md5sum $ipp_file | cut -d" " -f1) && ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash && mkdir -p $ipp_dir && cp $ipp_file $ipp_dir
說明:還有一種方法就是將IPP編譯選項關閉,只需要在cmake命令中添加選項:
cmake -DWITH_IPP=OFF
以上命令執行完成後,再重新執行之前的cmake命令,這樣就可以成功實現Makefile文件的生成。如果成功生成了文件,那麼請檢查創建過程中的輸出信息是否存在如下圖所示的一行內容:
在其中的“To be built”行中指出了最終會編譯的對應的模塊,如果成功檢測到了Java環境,那麼一定存在“java”這個選項,如上圖第3行所示。如果沒有找到,則說明Java運行環境沒有配置好,可以使用類似下面的命令重新配置一下:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
導出相應的環境變量以後,再重新執行cmake命令。
6. 編譯源代碼
接下來,需要根據生成的Makefile規則執行源代碼的編譯過程,對於現在的多核系統,可以執行以下命令來實現並行編譯:
make -j8
最終,會在“./bin/”目錄下生成包含Java接口的JAR文件“opencv-310.jar”,會在“./lib/”目錄下生成對應的動態鏈接庫文件“libopencv_java310.so”,這兩個文件就是使用Java開發基於OpenCV的計算機視覺應用時所用到的庫文件。
7. 安裝庫文件
最後,需要將生成的庫文件安裝到/usr/local目錄下的對應子文件下,此過程需要管理員權限創建文件和文件夾,執行的命令如下:
sudo make install
Java開發相關的動態鏈接庫文件和jar包位於目錄:
/usr/local/share/OpenCV/java/
8. 測試
接下來的工作就是在Eclipse上測試能否使用OpenCV庫來開發Java計算機視覺應用程序。
(1) 創建工程,依次選擇File -> New -> Java Project,如下圖所示,填寫工程名,然後點擊Finish完成。
(2)配置工程屬性。右鍵單擊工程,選擇“Properties”屬性菜單。選擇“Java Build Path”中的“Libraries”子選項卡,選擇“Add Library...”按鈕,在彈出的對話框中選擇“User Library”類型,然後單擊Next。
然後點擊“New”按鈕,在彈出的對話框中輸入用戶庫的名字,比如“opencv-3.1.0”。接下來,我們需要將這個庫關聯到對應的JAR文件。選擇“Edit”按鈕,在彈出的文件選擇對話框中,找到opencv-310.jar文件所在的路徑,並選擇該文件,確認。
接下來,展開JAR包,選中“Native Library Location”,然後點擊旁邊的“Edit”按鈕,選擇libopencv_java310.so所在的路徑,即/usr/local/share/OpenCV/java文件夾。這樣所有的屬性都配置完成了,點擊Finish即可。
(3) 編寫測試代碼。創建一個Sample類,然後輸入以下代碼。
1 import org.opencv.core.*; 2 import org.opencv.imgcodecs.Imgcodecs; 3 4 public class Sample { 5 static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);} 6 7 public static void main(String[] args){ 8 Mat m = Imgcodecs.imread("/home/tang/Pictures/baby.jpg"); 9 System.out.println(m); 10 } 11 }
該程序會從本地文件系統中讀取一張圖片,並把數據存儲到Mat類中,然後輸出這個圖片到信息。運行結果如下:
如果你看到了類似如上的信息,那麼恭喜你,你的OpenCV Java開發環境已經配置好了!
參考資料:
[1] http://www.linuxfromscratch.org/blfs/view/svn/general/opencv.html
[2] http://www.linuxidc.com/Linux/2016-05/131605.htm
[3] http://www.linuxidc.com/Linux/2016-05/131604.htm
OpenCV官方教程中文版(For Python) PDF http://www.linuxidc.com/Linux/2015-08/121400.htm
Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm
Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm
CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm
Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm
Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm
基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm
[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm
OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡