使用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_extra
make
时,一个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_python2
或BUILD_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 2 | 6 | |
Jetson TK1 | 3 | 如果生成由于与编译器相关的错误而失败,请使用较少数量的线程重试。如果系统自上次重新启动以来已经运行了很长时间,也请考虑重新启动系统。 |
Jetson TX1 | 4 | |
Ubuntu Desktop | 7 | 实际值将因您拥有的内核数和物理内存量而异。由于编译 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_EXAMPLES | ON | 控制是否生成 C/C++ 示例 | |||
BUILD_JASPER | OFF | 控制 Jasper 库 (libjasper)是否从3rdparty目录中的源代码构建 | |||
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 3.1.0 中 Python 2 绑定的构建 | 仅用于构建 2.4.X | ||
BUILD_opencv_python2 | ON | 控制 OpenCV 3.1.0 中 Python 3 绑定的构建 | 在 2.4.X 中未使用 | ||
BUILD_opencv_python3 | OFF | 控制 OpenCV 3.1.0 中 Python 3 绑定的构建 | 在 2.4.X 中未使用 | ||
CMAKE_BUILD_TYPE | Release | 选择生成类型(发布与开发) | 通常是 either 或Release Debug | ||
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 (for Linux) | 指定 CUDA 包含文件和库的位置 | |||
ENABLE_NEON | ON | 支持将 NEON SIMD 扩展用于 ARM 芯片 | Only passed for builds on ARM platforms | ||
ENABLE_PRECOMPILED_HEADERS | OFF | 启用/禁用对预编译标头的支持 | 仅在某些 ARM 平台上指定 | ||
INSTALL_C_EXAMPLES | ON | 允许将 C 示例文件作为make install | |||
INSTALL_TESTS | ON | 允许将测试作为make install | |||
OPENCV_TEST_DATA_PATH | ../opencv_extra/testdata | 存储库中目录的路径testdata opencv_extra | |||
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 |
|
| ||
WITH_OPENCL | OFF | 指定是否包括 OpenCL 运行时支持 | |||
WITH_OPENEXR | OFF | 指定是否通过 OpenEXR 包括 ILM 支持 | |||
WITH_OPENMP | OFF | 指定是否包括 OpenMP 运行时支持 | |||
WITH_TBB | ON | 指定是否包括英特尔 TBB 支持 | |||
WITH_VTK | OFF | 指定是否包括 VTK 支持 |
版权所有 © 2016,NVIDIA CORPORATION。保留所有权利。
参考文献:
1、《Building OpenCV for Tegra with CUDA》--Randy J. Ray
相关文章:

使用CUDA 为Tegra构建OpenCV
返回:OpenCV系列文章目录(持续更新中......) 上一篇:MultiArch与Ubuntu/Debian 的交叉编译 下一篇:在iOS中安装 警告: 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…...

YoloV8改进策略:BackBone改进|PKINet
摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…...

如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面
文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&a…...
小巧玲珑的SQLite
SQLite是桌面端和移动端的不错选择 前言 SQLite身影无处不在。 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低&a…...
【Android 内存优化】 native内存泄漏监控方案源码分析
文章目录 前言使用效果使用apiJNI的动态注册native方法动态注册 hook的实现android_dlopen_ext和dl_iterate_phdr naive监控的实现nativeGetLeakAllocs 总结 前言 Android的native泄漏怎么检测?下面通过研究开源项目KOOM来一探究竟。 使用效果 未触发泄漏前的日志…...

数据结构 二叉树 力扣例题AC——代码以及思路记录
LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录,请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …...
Android 11系统启动流程
在Android 11系统启动流程中,系统启动主要经历了以下几个阶段: 引导加载程序(Bootloader)启动: 当设备加电后,首先运行的是ROM Bootloader,它负责验证操作系统映像的完整性、初始化基本硬件并加…...

python 爬取杭州小区挂牌均价
下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…...

数据可视化-ECharts Html项目实战(3)
在之前的文章中,我们学习了如何创建堆积折线图,饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 …...

【理解机器学习算法】之Clustering算法(K-Means)
实现 K-means 聚类从零开始涉及几个关键步骤:初始化质心、将点分配给最近的质心、根据分配更新质心,以及重复这个过程直到收敛。这里是一个基本的 Python 实现: K-means 算法步骤: 初始化质心:从数据点中随机选择 k …...

Transformer的前世今生 day02(神经网络语言模型、词向量)
神经网络语言模型 使用神经网络的方法,去完成语言模型的两个问题,下图为两层感知机的神经网络语言模型: 假设词典V内有五个词:“判断”、“这个”、“词”、“的”、“词性”,且要输出P(w_next | “判断”、“这个”、…...

【Linux】多线程编程基础
💻文章目录 📄前言🌺linux线程基础线程的概念线程的优缺点线程与进程的区别 线程的创建 🌻linux线程冲突概念互斥锁函数介绍加锁的缺点 📓总结 📄前言 无论你是否为程序员,相信多线程这个词汇应…...

【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题
目录 需求描述问题问题代码页面展示 解决原因解决办法解决代码页面展示 代码汇总注 需求描述 腾讯地图上画点位,点击点位展示弹框信息 问题 问题代码 // 打开弹框 openInfoWindow(position, content) {this.infoWindow new TMap.InfoWindow({map: this.map,posit…...
Vue3、element-plus和Vue2、elementUI的一些转换
插槽 Vue3<template #default"scope"></template> <template #footer></template>Vue2<template slot-scope"scope"></template> <template slot"footer"></template>JS定义 Vue3 <script…...

Go语言gin框架中加载html/css/js等静态资源
Gin框架没有内置静态文件服务,但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下: 一、gin 框架加载 Html 模板文件的方法 方式1:加载单个或多个html文件,需要指明具体文件名 r.LoadHTMLFiles("vie…...

#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
3 月 19 日,#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场,深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》,从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…...
flask 继续学习
group_by group_by是一种在数据库查询或数据处理中常用的操作,它用于将数据按照指定的列进行分组。通过group_by操作,可以将数据集按照某个列的值进行分类,然后对每个分类进行聚合计算或其他操作。 在SQL语言中,group_by通常与聚…...

DockerFile遇到的坑
CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…...
并网型风光储微电网日前优化调度(MATLAB实现)
考虑了光伏发电、风力发电、电池储能和负荷需求等因素,与主网相连不考虑向主网售电情况。 % 微电网日前优化调度示例代码% 定义时间步长(例如,每小时) time_steps 24;% 生成模拟数据:光伏发电量,风力发电…...

MATLAB环境下基于振动信号的轴承状态监测和故障诊断
故障预测与健康管理PHM分为故障预测和健康管理与维修两部分,PHM首先借助传感器采集关键零部件的运行状态数据,如振动信号、温度图像、电流电压信号、声音信号及油液分析等,提取设备的运行监测指标,进而实现对设备关键零部件运行状…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...