OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
使用 CUDA 為 Tegra 構建 OpenCV

上一教程: 基於 ARM 的 Linux 系統的交叉編譯
下一教程: 影像入門

原始作者Randy J. Ray
相容性OpenCV >= 3.1.0
警告
本教程已棄用。

支援 CUDA 的 Tegra 版 OpenCV

本文件是關於為 Tegra 環境構建支援 CUDA 的 OpenCV 庫的基本指南。它涵蓋了從原始碼為三種 (3) 不同型別的平臺構建 3.1.0 版本庫的基本要素:

  • NVIDIA DRIVE™ PX 2 (V4L)
  • NVIDIA® Tegra® Linux 驅動包 (L4T)
  • 桌面版 Linux (Ubuntu 14.04 LTS 和 16.04 LTS)

本文件並非構建 OpenCV 時所有可用選項的詳盡指南。具體而言,它涵蓋了構建每個平臺時使用的基本選項,但不包括任何不需要(或與預設值保持不變)的選項。此外,本文不涵蓋 CUDA 工具包的安裝。

本文件側重於構建 OpenCV 的 3.1.0 版本,但這裡的指導原則也可能適用於從 Git 倉庫的 master 分支構建。OpenCV 2.4.13 版本的構建在某些 CMake 選項上存在差異,這些差異在下面的 構建 OpenCV 2.4.X 部分中進行了總結。

大多數配置命令都基於系統已安裝 CUDA 8.0。對於 Jetson TK1,使用的是較舊的 CUDA,因為該平臺不支援 8.0。這些說明也可能適用於舊版本的 CUDA,但僅在 8.0 上進行了測試。

關於原生編譯與交叉編譯的說明

OpenCV 構建系統支援所有受支援平臺的原生編譯,以及 ARM 等平臺的交叉編譯。原生編譯過程更簡單,而交叉編譯通常更快。

目前,本文件僅側重於原生編譯。

獲取原始碼

有兩種 (2) 方式獲取 OpenCV 原始碼:

本指南重點介紹使用 Git 倉庫。這是因為 3.1.0 版本的 OpenCV 不應用 Git 倉庫中的一些小上游更改就無法使用 CUDA 8.0 進行構建。

OpenCV

opencv 倉庫開始:

# Clone the opencv repository locally:
$ git clone https://github.com/opencv/opencv.git

要構建 3.1.0 版本(而不是構建最新原始碼),您必須檢出基於 3.1.0 標籤的分支:

$ cd opencv
$ git checkout -b v3.1.0 3.1.0

注意: 此操作會在您的克隆倉庫中建立一個新的本地分支。

必須透過 git cherry-pick 命令應用一些上游更改。第一個是應用一個專門針對 CUDA 8.0 版本構建的修復,該修復不屬於 3.1.0 版本:

# While still in the opencv directory:
$ git cherry-pick 10896

您將看到以下命令輸出:

[v3.1.0 d6d69a7] GraphCut deprecated in CUDA 7.5 and removed in 8.0
 Author: Vladislav Vinogradov <[email protected]>
 1 file changed, 2 insertions(+), 1 deletion(-)

其次,有一個針對某些系統上存在問題的 CMake 宏呼叫的修復:

$ git cherry pick cdb9c

您應該會看到類似以下內容的輸出:

[v3.1.0-28613 e5ac2e4] gpu samples: fix REMOVE_ITEM error
 Author: Alexander Alekhin <[email protected]>
 1 file changed, 1 insertion(+), 1 deletion(-)

最後一個需要的上游修復涉及開發包 (libopencv-dev) 中捆綁的 pkg-config 配置檔案:

$ git cherry-pick 24dbb

您應該會看到類似以下內容的輸出:

[v3.1.0 3a6d7ab] pkg-config: modules list contains only OpenCV modules (fixes #5852)
 Author: Alexander Alekhin <[email protected]>
 1 file changed, 7 insertions(+), 4 deletions(-)

至此,opencv 倉庫已準備好進行構建。

OpenCV Extra

opencv_extra 倉庫包含 OpenCV 庫的額外資料,包括測試和演示使用的檔案。它必須單獨克隆:

# In the same base directory from which you cloned OpenCV:
$ git clone https://github.com/opencv/opencv_extra.git

與 OpenCV 原始碼一樣,您必須使用與上述相同的方法將原始碼樹設定為 3.1.0 版本。當您從特定標籤構建時,兩個倉庫都必須檢出到該標籤。

$ cd opencv_extra
$ git checkout -b v3.1.0 3.1.0

如果您不打算執行測試或將測試資料與示例程式一起安裝,則可以選擇不獲取此倉庫。如果 CMake 呼叫中未引用它,則不會使用它。

注意: 如果您打算執行測試,某些測試需要資料存在,否則會失敗。

準備與先決條件

要構建 OpenCV,您需要一個目錄來建立配置和構建庫。您還需要 OpenCV 依賴的一些第三方庫。

Ubuntu Linux 的先決條件

這些是在 Linux 上為 Tegra 構建 OpenCV 的基本要求:

  • CMake 2.8.10 或更高版本
  • CUDA 工具包 8.0(也可使用 7.0 或 7.5)
  • 構建工具(make、gcc、g++)
  • Python 2.6 或更高版本

這些要求對於所有平臺(DRIVE PX 2、桌面版等)都是相同的。

在 Linux 上構建需要許多開發包:

  • libglew-dev
  • libtiff5-dev
  • zlib1g-dev
  • libjpeg-dev
  • libpng12-dev
  • libjasper-dev
  • libavcodec-dev
  • libavformat-dev
  • libavutil-dev
  • libpostproc-dev
  • libswscale-dev
  • libeigen3-dev
  • libtbb-dev
  • libgtk2.0-dev
  • pkg-config

上述某些包位於 Ubuntu Linux 系統的 universe 倉庫中。如果您尚未啟用該倉庫,則在嘗試安裝上述所有包之前,需要執行以下操作:

$ sudo apt-add-repository universe
$ sudo apt-get update

以下命令可以貼上到 shell 中以安裝所需的包:

$ sudo apt-get install \
    libglew-dev \
    libtiff5-dev \
    zlib1g-dev \
    libjpeg-dev \
    libpng12-dev \
    libjasper-dev \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libpostproc-dev \
    libswscale-dev \
    libeigen3-dev \
    libtbb-dev \
    libgtk2.0-dev \
    pkg-config

(為提高可讀性,添加了換行符和續行符。)

如果您希望構建 Python 繫結,您還需要 Python 2 和/或 Python 3 的相應包:

  • python-dev / python3-dev
  • python-numpy / python3-numpy
  • python-py / python3-py
  • python-pytest / python3-pytest

執行此操作的命令:

$ sudo apt-get install python-dev python-numpy python-py python-pytest
# And, optionally:
$ sudo apt-get install python3-dev python3-numpy python3-py python3-pytest

安裝所有必需的包後,即可配置構建。

準備構建區域

使用 CMake 系統配置其構建的軟體專案期望實際構建在原始碼樹本身之外完成。要配置和構建 OpenCV,請在您克隆 Git 倉庫的相同基礎目錄中建立一個名為“build”的目錄:

$ mkdir build
$ cd build

現在您已準備好配置和構建 OpenCV。

配置 OpenCV 進行構建

下面針對不同平臺給出的 CMake 配置選項旨在滿足 Tegra 所需的功能。它們基於構建 OpenCV 2.4.13 時使用的原始配置選項。

OpenCV 的構建由 CMake 配置。如果無引數執行,它會檢測系統所需的資訊。但是,如果 CUDA 檔案不在標準位置,它可能難以找到它們,並且它可能會嘗試構建一些您可能不希望包含的選項,因此建議使用以下 CMake 呼叫。

在以下子部分中列出的每個 cmake 命令中,為提高可讀性添加了換行符和縮排。示例中還為基於 Linux 的平臺添加了續行符,允許您將示例直接複製貼上到 shell 中。手動輸入這些命令時,請將命令和選項作為單行輸入。有關傳遞給 cmake 的引數的詳細說明,請參閱“CMake 引數參考”部分。

對於基於 Linux 的平臺,CMAKE_INSTALL_PREFIX 引數的顯示值為 /usr。您可以根據系統佈局將其設定為任何您想要的值。

在下面的每個 cmake 呼叫中,最後一個引數 OPENCV_TEST_DATA_PATH 告訴構建系統在哪裡找到 opencv_extra 倉庫提供的測試資料。當包含此引數時,make install 會將此測試資料與庫和示例程式碼一起安裝,而 make test 會自動將此路徑提供給需要從中載入資料的測試。如果您未克隆 opencv_extra 倉庫,請勿包含此引數。

Vibrante V4L 配置

支援平臺:Drive PX 2

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_python2=ON \
    -DBUILD_opencv_python3=OFF \
    -DENABLE_NEON=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN=6.2 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=OFF \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

上面提供的配置將 Python 2 的 Python 繫結(但不是 Python 3 的)作為構建過程的一部分。如果您想要 Python 3 繫結(或者不想要 Python 2 繫結),請根據需要更改 BUILD_opencv_python2 和/或 BUILD_opencv_python3 的值。要啟用繫結,請將值設定為 ON,要停用它們,請將其設定為 OFF

-DBUILD_opencv_python2=OFF

Jetson L4T 配置

支援平臺:

  • Jetson TK1
  • Jetson TX1

Jetson TK1 和 Jetson TX1 系統的配置略有不同。

Jetson TK1

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_CXX_FLAGS=-Wa,-mimplicit-it=thumb \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_python2=ON \
    -DBUILD_opencv_python3=OFF \
    -DENABLE_NEON=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-6.5 \
    -DCUDA_ARCH_BIN=3.2 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=OFF \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

注意: 這使用的是 CUDA 6.5,而不是 8.0。

Jetson TX1

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_python2=ON \
    -DBUILD_opencv_python3=OFF \
    -DENABLE_PRECOMPILED_HEADERS=OFF \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN=5.3 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=OFF \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

注意: 此配置未設定 ENABLE_NEON 引數。

Ubuntu 桌面版 Linux 配置

支援平臺:

  • Ubuntu 桌面版 Linux 14.04 LTS
  • Ubuntu 桌面版 Linux 16.04 LTS

下面提供給 cmake 的配置選項旨在滿足 Tegra 所需的功能。對於桌面系統,您可能希望調整一些選項以啟用(或停用)某些功能。下面啟用的功能基於 OpenCV 2.4.13 的構建。

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_python2=ON \
    -DBUILD_opencv_python3=OFF \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN='3.0 3.5 5.0 6.0 6.2' \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=OFF \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

此配置與 V4L 和 L4T 的配置幾乎相同,只是 CUDA_ARCH_BIN 引數指定了多種架構以支援各種 GPU 板。對於桌面,您可以選擇省略此引數,CMake 將轉而執行一個小型測試程式,探測受支援的架構。但是,生成的庫可能無法在具有不同顯示卡的 Ubuntu 系統上工作。

與前面的示例一樣,上面給出的配置將 Python 2 的 Python 繫結(但不是 Python 3 的)作為構建過程的一部分。

構建 OpenCV

一旦 cmake 完成 OpenCV 的配置,就可以使用標準的 make 工具進行構建。

使用 make 構建

呼叫 make 唯一需要的引數是 -j 引數,用於指定要使用的並行執行緒數。這取決於系統、可用記憶體量、其他執行程序等。下表提供了此引數的建議值:

Platform建議值注意事項
DRIVE PX 26
Jetson TK13 如果構建因編譯器相關錯誤而失敗,請嘗試使用較少的執行緒數。如果系統自上次重啟以來已執行很長時間,也請考慮重啟系統。
Jetson TX14
Ubuntu 桌面版7 實際值將根據您的核心數和物理記憶體量而異。由於編譯 CUDA 程式碼的資源要求,不建議超過 7。

根據您選擇的值,進行構建(假設您選擇了 6):

$ make -j6

預設情況下,CMake 隱藏構建步驟的詳細資訊。如果您需要檢視每個編譯單元等的更多詳細資訊,可以啟用詳細輸出:

$ make -j6 VERBOSE=1

測試 OpenCV

構建成功完成後,您可以選擇執行 OpenCV 提供的大量測試。如果您未克隆 opencv_extra 倉庫並在 cmake 呼叫中指定 testdata 的路徑,則不建議進行測試。

在 Linux 下測試

要在 Linux 下執行基本測試,請執行:

$ make test

這將執行 ctest 來執行測試,如 OpenCV 倉庫中的 CTest 語法所指定。ctest 框架接受許多不同的引數(太多無法在此列出,請參閱 CTest 的手冊頁以檢視完整集合),如果您希望傳遞其中任何一個,可以透過在 make 命令列引數 ARGS 中指定它們來完成:

$ make test ARGS="--verbose --parallel 3"

在此示例中,向 ctest 傳遞了兩個 (2) 引數:--verbose--parallel 3。第一個引數使 ctest 的輸出更詳細,第二個引數使 ctest 最多並行執行三個 (3) 測試。與選擇構建的執行緒數一樣,根據可用的處理器核心數、物理記憶體等選擇測試。某些測試確實嘗試分配大量記憶體。

已知測試問題

目前,OpenCV 測試套件中的所有測試並非都透過。無論是否編譯 CUDA,都有測試失敗,並且有些僅特定於 CUDA 的測試目前也未透過。

注意: 沒有在沒有 CUDA 的情況下透過但在包含 CUDA 時才失敗的測試。

由於失敗測試的完整列表因平臺而異,因此在此處列出並不實用。

安裝 OpenCV

安裝 OpenCV 非常簡單。對於基於 Linux 的平臺,命令是:

$ make install

根據選擇的安裝位置,您可能需要 root 許可權才能安裝。

構建 OpenCV 2.4.X

如果您希望構建自己的 2.4 版本 OpenCV,只需進行少量調整。在撰寫本文時,2.4 樹上的最新版本是 2.4.13。這些說明可能適用於 2.4 的更高版本,但尚未對任何更早的版本進行測試。

注意: 2.4.X OpenCV 原始碼不包含已合併到 3.X 版本 OpenCV 中的 Tegra 額外模組和程式碼。本指南的此部分僅適用於您想要構建純淨版 OpenCV 2.4 的情況。

選擇 2.4 原始碼

首先,您必須選擇正確的源分支或標籤。如果您想要特定版本,例如 2.4.13,您需要基於標籤建立一個本地分支,就像上面對 3.1.0 標籤所做的那樣:

# Within the opencv directory:
$ git checkout -b v2.4.13 2.4.13

# Within the opencv_extra directory:
$ git checkout -b v2.4.13 2.4.13

如果您只想獲取 OpenCV 2.4 系列的最新程式碼,倉庫中已經有一個 2.4 分支。您可以檢出它而不是特定的標籤:

$ git checkout 2.4

構建 2.4.13 原始碼時,不需要使用 3.1.0 所用的 git cherry-pick 命令。

配置

配置仍像以前一樣使用 CMake 完成。主要區別在於 OpenCV 2.4 僅提供 Python 2 的 Python 繫結,因此在 CMake 引數中不區分 Python 2 和 Python 3。只有一個引數 BUILD_opencv_python。此外,還有一個構建相關的引數,它控制 2.4 中存在而 3.1.0 中不存在的功能。此引數是 BUILD_opencv_nonfree

配置仍在單獨的目錄中進行,該目錄必須是 opencvopencv_extra 目錄的同級目錄。

配置 Vibrante V4L

對於 DRIVE PX 2:

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_nonfree=OFF \
    -DBUILD_opencv_python=ON \
    -DENABLE_NEON=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN=6.2 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=ON \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

配置 Jetson L4T

對於 Jetson TK1:

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_nonfree=OFF \
    -DBUILD_opencv_python=ON \
    -DENABLE_NEON=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-6.5 \
    -DCUDA_ARCH_BIN=3.2 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=ON \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

對於 Jetson TX1:

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_nonfree=OFF \
    -DBUILD_opencv_python=ON \
    -DENABLE_PRECOMPILED_HEADERS=OFF \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN=5.3 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=ON \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

配置桌面版 Ubuntu Linux

對於 14.04 LTS 和 16.04 LTS:

$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_nonfree=OFF \
    -DBUILD_opencv_python=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \
    -DCUDA_ARCH_BIN='3.0 3.5 5.0 6.0 6.2' \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=ON \
    -DINSTALL_TESTS=ON \
    -DOPENCV_TEST_DATA_PATH=../opencv_extra/testdata \
    ../opencv

構建、測試和安裝

配置完成後,構建、測試和安裝的步驟與上面 3.1.0 原始碼的步驟相同。

CMake 引數參考

下表列出了上面推薦的呼叫中傳遞給 CMake 的所有引數。其中一些是 CMake 本身的引數,而大多數是 OpenCV 特有的。

引數我們的預設值作用注意事項
BUILD_EXAMPLESON控制是否構建 C/C++ 示例
BUILD_JASPEROFF控制是否從 3rdparty 目錄中的原始碼構建 Jasper 庫 (libjasper)
BUILD_JPEGOFF同上,針對 libjpeg
BUILD_PNGOFF同上,針對 libpng
BUILD_TBBOFF同上,針對 tbb
BUILD_TIFFOFF同上,針對 libtiff
BUILD_ZLIBOFF同上,針對 zlib
BUILD_JAVAOFF控制 OpenCV 的 Java 繫結構建構建 Java 繫結要求 OpenCV 庫僅支援靜態連結
BUILD_opencv_nonfreeOFF控制非自由(非開源)元素的構建僅用於構建 2.4.X
BUILD_opencv_pythonON控制 OpenCV 2.4.X 中 Python 2 繫結的構建僅用於構建 2.4.X
BUILD_opencv_python2ON控制 OpenCV 3.1.0 中 Python 2 繫結的構建不用於 2.4.X
BUILD_opencv_python3OFF控制 OpenCV 3.1.0 中 Python 3 繫結的構建不用於 2.4.X
CMAKE_BUILD_TYPERelease選擇構建型別(釋出版 vs. 開發版)通常為 ReleaseDebug
CMAKE_INSTALL_PREFIX/usr設定庫和標頭檔案的安裝根目錄
CUDA_ARCH_BIN變動設定程式碼編譯所針對的 CUDA 架構通常僅用於已知特定卡的平臺。如果您不傳遞此引數,OpenCV 會包含一個小型程式,用於確定系統已安裝卡的架構。在此處,對於 Ubuntu 桌面,該值是一個列表,以最大化顯示卡支援。
CUDA_ARCH_PTX"" 為指定的虛擬 PTX 架構構建 PTX 中間程式碼
CUDA_TOOLKIT_ROOT_DIR/usr/local/cuda-8.0 (適用於 Linux)指定 CUDA 包含檔案和庫的位置
ENABLE_NEONON啟用 ARM 晶片的 NEON SIMD 擴充套件使用僅用於 ARM 平臺上的構建
ENABLE_PRECOMPILED_HEADERSOFF啟用/停用預編譯標頭檔案支援僅在某些 ARM 平臺上指定
INSTALL_C_EXAMPLESON啟用將 C 示例檔案作為 make install 的一部分進行安裝
INSTALL_TESTSON啟用將測試作為 make install 的一部分進行安裝
OPENCV_TEST_DATA_PATH../opencv_extra/testdataopencv_extra 倉庫中 testdata 目錄的路徑
WITH_1394OFF指定是否包含 IEEE-1394 支援
WITH_CUDAON指定是否包含 CUDA 支援
WITH_FFMPEGON指定是否包含 FFMPEG 支援
WITH_GSTREAMEROFF指定是否包含 GStreamer 1.0 支援
WITH_GSTREAMER_0_10OFF指定是否包含 GStreamer 0.10 支援
WITH_GTKON指定是否包含 GTK 2.0 支援僅在 Linux 平臺(而非 Microsoft Windows)上提供
WITH_OPENCLOFF指定是否包含 OpenCL 執行時支援
WITH_OPENEXROFF指定是否透過 OpenEXR 包含 ILM 支援
WITH_OPENMPOFF指定是否包含 OpenMP 執行時支援
WITH_TBBON指定是否包含 Intel TBB 支援
WITH_VTKOFF指定是否包含 VTK 支援

版權所有 © 2016,NVIDIA CORPORATION。保留所有權利。