使用CUDA 为Tegra构建OpenCV

返回:OpenCV系列文章目录(持续更新中......)

上一篇:MultiArch与Ubuntu/Debian 的交叉编译

下一篇:在iOS中安装

警告:

本教程可能包含过时的信息。

使用CUDA for Tegra 的OpenCV

本文档是构建支持 CUDA 的 OpenCV 库以在 Tegra 环境中使用的基本指南。它涵盖了从三 (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 源代码:

  • 直接从 OpenCV 下载页面下载
  • 克隆 GitHub 上托管的 git 存储库

在本指南中,重点是使用 git 存储库。这是因为 OpenCV 的 3.1.0 版本如果不应用 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该命令应用一些上游更改。首先是应用一个修复程序,专门使用不属于 3.1.0 版本的 CUDA 8.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.0Author: Vladislav Vinogradov <vlad.vinogradov@itseez.com>1 file changed, 2 insertions(+), 1 deletion(-)

其次,有一个针对 CMake 宏调用的修复程序,该调用在某些系统上存在问题:

$ git cherry pick cdb9c

输出:

[v3.1.0-28613 e5ac2e4] gpu samples: fix REMOVE_ITEM errorAuthor: Alexander Alekhin <alexander.alekhin@itseez.com>1 file changed, 1 insertion(+), 1 deletion(-)

需要的最后一个上游修复处理pkg-config与开发人员包捆绑在一起的配置文件 (libopencv-dev):

$ git cherry-pick 24dbb

您应看到类似于以下内容的输出:

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

此时,存储库opencv已准备好进行构建。

OpenCV依赖库

存储库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-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_extramake时,一个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 绑定(BUILD_opencv_python2BUILD_opencv_python3不需要 Python 2 绑定),请根据需要更改 and/or 的值。若要启用绑定,请将值设置为ON ,若要禁用绑定,请将其设置为OFF

-DBUILD_opencv_python2=OFF

Jetson L4T 配置

支持的平台:

  • 杰特森 TK1
  • 杰特森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 系统上运行。CUDA_ARCH_BIN

与前面的示例一样,上面给出的配置在构建过程中为 Python 2(但不是 Python 3)构建 Python 绑定。

构建 OpenCV

完成cmake OpenCV 配置后,使用标准实用程序完成​​​​​​​make构建。

make方式构建

调用make的唯一参数是用于指定要使用的并行线程数的参数​​​​​​​-j。这取决于系统和可用内存量、其他正在运行的进程等。下表提供了此参数的建议值:

平台建议值说明
DRIVE PX 26
Jetson TK13如果生成由于与编译器相关的错误而失败,请使用较少数量的线程重试。如果系统自上次重新启动以来已经运行了很长时间,也请考虑重新启动系统。
Jetson TX14
Ubuntu Desktop7实际值将因您拥有的内核数和物理内存量而异。由于编译 CUDA 代码的资源要求,不建议超过 7。

根据您选择的值,生成(假设您选择了 6):

$ make -j6

默认情况下,CMake 隐藏生成步骤的详细信息。如果需要查看有关每个编译单元等的更多详细信息,可以启用详细输出:

$ make -j6 VERBOSE=1

测试 OpenCV

构建成功完成后,您可以选择运行 OpenCV 提供的大量测试。如果未克隆存储库并在调用中指定路径,则不建议进行测试

在 Linux 下测试

要在 Linux 下运行基本测试,请执行:

$ make test

这将执行ctest测试,如 OpenCV 存储库中的 CTest 语法中所指定的那样。该ctest工具采用许多不同的参数(太多了,无法在此处列出,请参阅 CTest 的手册页以查看完整集),如果您希望传递其中任何一个make,您可以通过在命令行参数中指定它们来实现​​​​​​​​​​​​​​​​​​​​​ARGS

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

在此示例中,有两 (2) 个参数传递给ctest :​​​​​​​--verbose 和​​​​​​​--parallel 3。第一个参数ctes使输出更详细,第二个参数ctes导致并行运行多达三 (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 源代码没有上游到 OpenCV 3.X 版本的 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 

配置仍然在单独的目录中进行,该目录必须是 opencv和​​​​​​​opencv_extra目录的同级目录。

配置Vibrante V4L

Configuring 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控制 Jasper 库 (libjasper)是否从3rdparty目录中的源代码构建
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 3.1.0 中 Python 2 绑定的构建仅用于构建 2.4.X
BUILD_opencv_python2ON控制 OpenCV 3.1.0 中 Python 3 绑定的构建在 2.4.X 中未使用
BUILD_opencv_python3OFF控制 OpenCV 3.1.0 中 Python 3 绑定的构建在 2.4.X 中未使用
CMAKE_BUILD_TYPERelease选择生成类型(发布与开发)通常是 either 或ReleaseDebug
CMAKE_INSTALL_PREFIX/usr
设置库和头文件安装的根目录
CUDA_ARCH_BINvaries设置为其编译代码的 CUDA 体系结构通常只针对具有已知特定卡的平台通过。OpenCV 包含一个小程序,如果您不传递此参数,则该程序可以确定系统安装卡的架构。在这里,对于 Ubuntu 桌面,该值是一个列表,以最大化卡支持。
CUDA_ARCH_PTX""为指定的虚拟 PTX 体系结构生成 PTX 中间代码
CUDA_TOOLKIT_ROOT_DIR/usr/local/cuda-8.0 (for Linux)指定 CUDA 包含文件和库的位置
ENABLE_NEONON支持将 NEON SIMD 扩展用于 ARM 芯片Only passed for builds on ARM platforms
ENABLE_PRECOMPILED_HEADERSOFF启用/禁用对预编译标头的支持仅在某些 ARM 平台上指定
INSTALL_C_EXAMPLESON允许将 C 示例文件作为make install
INSTALL_TESTSON允许将测试作为make install
OPENCV_TEST_DATA_PATH../opencv_extra/testdata存储库中目录的路径testdataopencv_extra
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指定是否包括英特尔 TBB 支持
WITH_VTKOFF指定是否包括 VTK 支持

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

参考文献:

1、《Building OpenCV for Tegra with CUDA》--Randy J. Ray

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌具身智能最新进展:RT-H 机器人通用灵巧抓取

随着 GPT-4 等大型语言模型与机器人研究的结合愈发紧密&#xff0c;人工智能正在越来越多地走向现实世界&#xff0c;因此具身智能相关的研究也正受到越来越多的关注。在众多研究项目中&#xff0c;谷歌的「RT」系列机器人始终走在前沿&#xff08;参见《大模型正在重构机器人&…

各位老板,你需要的工厂数字孪生可视化库在这

各位老板是不是很喜欢下面这种有逼格的大屏,下面介绍一下怎么实现的,保证有所收获。 Cesium是一个开源的WebGL JavaScript库&#xff0c;用于创建高性能的三维地球、地图和虚拟环境。它支持在浏览器中实现高质量的地球模拟&#xff0c;同时提供了丰富的功能特点&#xff0c;使得…

k8s系列之十五 Istio 部署Bookinfo 应用

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖&#xff0c;但是构成了一个有代表性的服务网格的例子&#xff1a;它由多个服务、多个语言构成&#xff0c;并且 reviews 服务具有多个版本。 该应用由四个单独的微服务构成。 这个应用模仿在线书…

模板高级使用(非类型模板参数,特化,分离编译)

文章目录 模板没有实例化取内嵌类型报错问题非类型模板参数模板的特化函数模板的特化类模板的特化1.全特化2.偏特化 模板的分离编译 模板没有实例化取内嵌类型报错问题 首先在这里分享一个模板的常见报错问题。就是模板的在没有实例化的情况下去取模板类里面的内嵌类型这时候的…

代码随想录|Day25|回溯05|491.非递减子序列、46.全排列、47.全排列II

491. 非递减子序列 本题并不能像 90.子集II 那样&#xff0c;使用排序进行树层去重。虽然题目没有明确不能排序&#xff0c;但如果排序了&#xff0c;集合本身就是递增子序列&#xff0c;这是LeetCode示例2中没有出现的。 所以本题的关键在于&#xff0c;如何在不排序的情况下对…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

Java学习笔记(17)

集合进阶 单列集合 Collection List set Add clear remove contains isempty size Add方法可能也会添加失败 同理&#xff0c;可能删除失败 Contains细节 为什么要重写equals&#xff1f; 因为contains底层用的是object类中的equals方法&#xff0c;比较的是地址值&#xf…

为什么穷人什么都懂,就是不懂赚钱?2024金矿项目! 2024创业好项目 !2024创业新项目新商机! 2024超级机会

为什么穷人什么都懂&#xff0c;就是不懂赚钱&#xff1f;有位网友是这么说的&#xff0c;穷人的思维有一个致命的缺陷&#xff0c;就是追求确定性&#xff0c;进而失去了可能性。而赚钱的真相实际上非常残酷。世界上能够赚钱的事情必定是不确定的&#xff0c;能够赚取巨额财富…

万亿参数GPU!算力提升30倍!英伟达新核弹B200重磅发布!

关注文章底部的公众号,获取每日AI资讯 前沿 3月18日-21日期间,英伟达在美国圣何塞召开GTC大会。创始人黄仁勋也在GTC大会上,做了一场长达两小时的开幕演讲,展示了其在AI芯片、机器人、汽车等领域的最新研发成果和技术进展,号称让全世界用上AI。 全球头号人工智能领域开发…

算法第三十一天-直方图的水量

直方图的水量 题目要求 解题思路 使用面向列的计算比面向行的计算更加容易。我们只需要考虑当前的位置的左右最高模板的高度。 方法一、暴力解法 每个位置能接到多少雨水&#xff0c;很容易想到[木桶效应]&#xff0c;即是由两边最短的木板限制的。那么直观思路就是&#x…

扶贫惠农推介系统|基于jsp技术+ Mysql+Java+ B/S结构的扶贫惠农推介系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

Python学习:元组

Python 元组概念 Python 中的元组&#xff08;tuple&#xff09;是不可变的有序集合。它是一种数据类型&#xff0c;类似于列表&#xff08;list&#xff09;&#xff0c;但在创建后不能被修改。元组使用圆括号 () 来表示&#xff0c;其中的元素可以是任意类型&#xff0c;并且…

初识数据库原理:为什么需要数据库?

初识数据库原理&#xff1a;什么是数据库&#xff1f; Chapter1&#xff1a;什么是数据库&#xff1f; 笔记来源&#xff1a;《漫画数据库》–科学出版社 1.1 为什么需要数据库&#xff1f; 文件应用的管理方式&#xff0c;数据会出现重复。 若各个部门各自管理自己一方的数…

2024年【T电梯修理】考试内容及T电梯修理作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试内容根据新T电梯修理考试大纲要求&#xff0c;安全生产模拟考试一点通将T电梯修理模拟考试试题进行汇编&#xff0c;组成一套T电梯修理全真模拟考试试题&#xff0c;学员可通过T电梯修理作业考试题库全真…

Linux手动创建用户不使用useradd【七步走完成】

文章目录 第一步&#xff1a;修改 /etc/passwd 文件第二步&#xff1a;修改 /etc/shadow 文件第三步&#xff1a;修改 /etc/group 文件第四步&#xff1a;新建用户家目录第五步&#xff1a;复制/etc/skel目录下的环境变量配置文件到家目录下第六步&#xff1a;修改家目录的权限…

AI系统性学习—LangChain入门

文章目录 1、LangChain入门1.1 简介1.2 架构1.3 核心概念1.2 快速入门1.3 安装 2、LangChain Prompt Template2.1 什么是提示词模版2.1 创建一个提示词模版2.2 聊天消息提示词模版2.3 模版追加示例 3、语言模型3.1 LLM基础模型3.2 LangChain聊天模型3.3 自定义模型3.4 输出解析…

基于springboot的stone音乐播放器的设计与实现

摘 要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;stone音乐播放器展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;…

数电复试速成,期末速成

【拯救者】数字电路与逻辑速成(期末考研复试专升本)均可用 1️⃣先讲每章对应的基础和题目 2️⃣接着会讲对应的题目巩固 &#x1f357;提供文档下载 这里讲的是【 &#x1f337;速成&#x1f337; 速成&#x1f337; 速成】版本&#xff0c;按课本章节来&#xff0c; 抽取重…

【Unity】捕捉PC桌面的插件

【背景】 之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。 在此感谢作者Hecomi。 【特征和限制】 一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电…

这个简单的生活方式,为你带来满满的幸福感

在今天文章的开头&#xff0c;我想请你思考一个问题&#xff1a;影响幸福感的最大因素是什么&#xff1f; 不妨先想一想&#xff0c;再往下拉&#xff0c;继续阅读。 可能不少朋友的回答&#xff0c;会是财富、事业、理想、生活环境、社会地位…… 这些因素当然对幸福感都非常重…