首頁 > 軟體

Ubuntu 16.04設定OpenCV 3.1.0 for Java

2020-06-16 17:40:58

我們都知道,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


IT145.com E-mail:sddin#qq.com