上一个教程 : 基于 ARM 的 Linux 系统的交叉编译
下一个教程 : 图像入门
原作者 | Randy J. Ray |
---|---|
兼容性 | OpenCV >= 3.1.0 |
警告
本教程已过时。
使用 CUDA 的 OpenCV for Tegra
本文档是在 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 工具包的安装。
本文档侧重于构建 3.1.0 版本的 OpenCV,但此处的指导原则也适用于从 git 仓库的主分支构建。在构建 OpenCV 2.4.13 版本时,CMake 的某些选项有所不同,下文将在构建 OpenCV 2.4.X 部分对此进行总结。
大多数配置命令都基于系统已安装 CUDA 8.0 的情况。在 Jetson TK1 的情况下,由于该平台不支持 8.0,因此使用了较旧的 CUDA。这些指令也可能适用于旧版本的 CUDA,但仅使用 8.0 进行了测试。
关于本地编译与交叉编译的说明
OpenCV 编译系统支持所有支持平台的本机编译,以及 ARM 等平台的交叉编译。本机编译过程更简单,而交叉编译通常更快。
目前,本文档只关注本地编译。
获取源代码
获取 OpenCV 源代码有两种方法:
- 从 OpenCV 下载页面直接下载
- 克隆 GitHub 上的 git 仓库
本指南的重点是使用 git 仓库。这是因为 3.1.0 版本的 OpenCV 如果不应用 git 仓库中的一些上游小改动,将无法与 CUDA 8.0 一起构建。
OpenCV
从 opencv 仓库开始:
# 在本地克隆 opencv 仓库:
$ 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
命令来应用。其中第一项改动是专门针对使用 8.0 版本的 CUDA 进行构建的修正,而这并不是 3.1.0 版本的一部分:
# 还在 opencv 目录中时:
$ git cherry-pick 10896
您将看到以下命令输出:
[v3.1.0 d6d69a7] GraphCut 在 CUDA 7.5 中被弃用,在 8.0 中被移除
作者:Vladislav Vinograd Vladislav Vinogradov <vlad.vinogradov@itseez.com>
更改了 1 个文件,插入 2 个(+),删除 1 个(-)
其次,还修复了在某些系统上有问题的 CMake 宏调用:
$ git cherry pick cdb9c
你应该会看到类似以下的输出
[v3.1.0-28613 e5ac2e4] gpu 样本:修复 REMOVE_ITEM 错误
作者:Alexander Alekhin Alexander Alekhin <alexander.alekhin@itseez.com>
1 个文件已更改,1 个插入(+),1 个删除(-)
最后一个需要修复的上游问题是与开发者软件包(libopencv-dev)捆绑的 pkg-config 配置文件:
$ git cherry-pick 24dbb
您应该会看到类似以下的输出
[v3.1.0 3a6d7ab] pkg-config: modules list contains only OpenCV modules (fixes #5852)
作者: Alexander Alekhin Alexander Alekhin <alexander.alekhin@itseez.com>
更改了 1 个文件,插入了 7 个(+),删除了 4 个(-)
至此,opencv
软件源已可用于构建。
OpenCV Extra
opencv_extra
资源库包含 OpenCV 库的额外数据,包括测试和演示使用的数据文件。它必须单独克隆:
# 在克隆 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
# 还可以选择
$ 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 3)构建 Python 绑定。如果您想要 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 3)构建 Python 绑定。
构建 OpenCV
cmake
完成对 OpenCV 的配置后,就可以使用标准的 make 工具进行构建。
使用 make 构建
调用 make
时唯一需要的参数是用于指定使用多少并行线程的 -j
参数。这取决于系统和可用内存的多少,以及其他正在运行的进程等。下表提供了该参数的建议值:
平台 | 建议值 | 备注 |
---|---|---|
DRIVE PX 2 | 6 | |
Jetson TK1 | 3 | 如果因编译器相关错误导致构建失败,请使用较少的线程数重试。如果系统自上次重启后运行了很长时间,也可考虑重启系统。 |
Jetson TX1 | 4 | |
Ubuntu Desktop | 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 手册页面查看全部参数),如果您希望传递其中任何一个参数,可以在名为 ARGS 的 make 命令行参数中指定这些参数:
$ make test ARGS="--verbose --parallel 3"
在本例中,有两(2)个参数传递给 ctest:–verbose 和 --parallel 3。第一个参数会使 ctest 的输出更详细,第二个参数会使 ctest 并行运行多达三(3)个测试。与选择构建线程数一样,任何测试选择都应以可用的处理器内核数、物理内存等为基础。有些测试会尝试分配大量内存。
测试的已知问题
目前,OpenCV 测试套件中并非所有测试都能通过。有些测试无论是否编译了 CUDA 都会失败,还有一些仅针对 CUDA 的测试目前也无法通过。
注意:没有测试在未编译 CUDA 的情况下能通过,但只有在包含 CUDA 时才会失败。
由于失败测试的完整列表因平台而异,因此在此列出它们是不切实际的。
安装 OpenCV
安装 OpenCV 非常简单。对于基于 Linux 的平台,命令如下
$ make install
根据所选的安装位置,您可能需要 root 权限才能安装。
构建 OpenCV 2.4.X
如果您想构建自己的 OpenCV 2.4 版本,只需做一些调整。在撰写本文时,2.4 树上的最新版本是 2.4.13。这些说明可能适用于 2.4 的后续版本,但尚未对任何早期版本进行测试。
注意:2.4.X OpenCV 源程序不包含 Tegra 的额外模块和代码,这些模块和代码已被纳入 3.X 版本的 OpenCV 上游。本指南的这一部分仅适用于您想构建一个普通版本的 OpenCV 2.4 的情况。
选择 2.4 源代码
首先,您必须选择正确的源代码分支或标签。如果你想要一个特定的版本,比如 2.4.13,你需要根据标签创建一个本地分支,就像上面的 3.1.0 标签一样:
# 在 opencv 目录中:
$ git checkout -b v2.4.13 2.4.13
# 在 opencv_extra 目录中:
$ 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
。
配置仍在一个单独的目录中进行,该目录必须是 opencv
和 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_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_EXAMPLES | ON | 控制是否编译 C/C++ 示例 | |
BUILD_JASPER | OFF | 控制是否从第三方目录中的源代码构建 Jasper 库 (libjasper) | |
BUILD_JPEG | OFF | 如上,针对 libjpeg | |
BUILD_PNG | OFF | 如上,适用于 libpng | |
BUILD_TBB | OFF | 如上,适用于 tbb | |
BUILD_TIFF | OFF | 如上,适用于 libtiff | |
BUILD_ZLIB | OFF | 如上,用于 zlib | |
BUILD_JAVA | OFF | 控制 OpenCV Java 绑定的构建 | 构建 Java 绑定要求仅构建用于静态链接的 OpenCV 库 |
BUILD_opencv_nonfree | OFF | 控制非自由(非开源)元素的构建 | 仅用于构建 2.4.X 版 |
BUILD_opencv_python | ON | 控制 OpenCV 2.4.X 中 Python 2 绑定的构建 | 仅用于构建 2.4.X |
BUILD_opencv_python2 | ON | 控制 OpenCV 3.1.0 中 Python 2 绑定的构建 | 在 2.4.X 中未使用。 |
BUILD_opencv_python3 | OFF | 在 OpenCV 3.1.0 中控制 Python 3 绑定的构建 | 在 2.4.X 中未使用 |
CMAKE_BUILD_TYPE | Release | 选择联编类型(发行版与开发版) | 通常为发行版或调试版 |
CMAKE_INSTALL_PREFIX | /usr | 设置安装库和头文件的根目录 | |
CUDA_ARCH_BIN | varies | 设置编译代码所适用的 CUDA 架构 | 通常仅适用于已知特定显卡的平台。如果不传递此参数,OpenCV 会包含一个小程序来确定系统所安装板卡的架构。对于 Ubuntu 桌面,这里的值是一个列表,以最大限度地支持显卡。 |
CUDA_ARCH_PTX | “” | 为指定的虚拟 PTX 架构构建 PTX 中间代码 | |
CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-8.0(适用于 Linux) 指定 CUDA 包含文件和库的位置 | |||
ENABLE_NEON | ON | 启用针对 ARM 芯片的 NEON SIMD 扩展 | 仅在 ARM 平台上构建时通过 |
ENABLE_PRECOMPILED_HEADERS | OFF | 启用/禁用对预编译头文件的支持 | 仅在某些 ARM 平台上指定 |
INSTALL_C_EXAMPLES | ON | 作为 make install 的一部分,启用安装 C 示例文件 | |
INSTALL_TESTS | ON | 作为 make install 的一部分,启用测试安装 | |
OPENCV_TEST_DATA_PATH | …/opencv_extra/testdata | 通向 opencv_extra 资源库中 testdata 目录的路径 | |
WITH_1394 | OFF | 指定是否包含 IEEE-1394 支持 | |
WITH_CUDA | ON | 指定是否包含 CUDA 支持 | |
WITH_FFMPEG | ON | 指定是否包含 FFMPEG 支持 | |
WITH_GSTREAMER | OFF | 指定是否包含 GStreamer 1.0 支持 | |
WITH_GSTREAMER_0_10 | OFF | 指定是否包含 GStreamer 0.10 支持 | |
WITH_GTK | ON | 指定是否包含 GTK 2.0 支持 | 仅适用于 Linux 平台,不适用于 Microsoft Windows。 |
WITH_OPENCL | OFF | 指定是否包含 OpenCL 运行时支持 | |
WITH_OPENEXR | OFF | 指定是否通过 OpenEXR 加入 ILM 支持 | |
WITH_OPENMP | OFF | 指定是否包含 OpenMP 运行时支持 | |
WITH_TBB | ON | 指定是否包含 Intel TBB 支持 | |
WITH_VTK | OFF | 指定是否包含 VTK 支持 |