环境说明
- opencv版本:4.5.5
介绍
通过源码编译opencv时,cmake可以带有很多可选参数,这里对这些可选参数进行说明。
配置选项可以通过几种不同的方式设置:
- 命令行:cmake-Doption=value…
- 初始缓存文件:cmake-C my_options.txt…
- 通过Cmake-GUI进行设定
在本参考中,我们将使用常规命令行。
# 初始化配置文件
cmake ../opencv
# 打印所有选项
cmake -L
# 打印所有选项,附带说明文档
cmake -LH
# 打印所有选项,包括高级
cmake -LA
最常用和有用的是以with_、ENABLE_、BUILD_、OPENCV_开头的选项。默认值因平台和其他选项值而异。
常规选项
1.Build with extra modules
OPENCV_EXTRA_MODULES_PATH选项包含一个分号分隔的目录列表,其中包含将添加到生成中的额外模块。模块目录必须具有兼容的布局和CMakeList.txt。仅支持0级和1级深层模块位置。
# 使用opencv_contrib中的所有模块进行构建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# 使用opencvcontrib模块之一构建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/bgsegm ../opencv
# 使用两个自定义模块构建(必须在bash中转义分号)
cmake -DOPENCV_EXTRA_MODULES_PATH=../my_mod1\;../my_mod2 ../opencv
2.Debug build
CMAKE_BUILD_TYPE选项可用于启用调试构建;生成的二进制文件将包含调试符号,大多数编译器优化将被关闭。若要在Release build中启用调试符号,请启用build_WITH_debug_INFO选项。
在某些平台(如Linux)上,必须在配置阶段设置构建类型:
cmake -DCMAKE_BUILD_TYPE=Debug ../opencv
cmake --build .
在其他平台上,可以在同一构建目录(例如Visual Studio、XCode)中生成不同类型的构建:
cmake <options> ../opencv
cmake --build . --config Debug
如果您使用GNU libstdc++(GCC的默认值),您可以启用ENABLE_GNU_STL_DEBUG选项,那么C++库将在调试模式下使用,例如,索引将在向量元素访问期间进行绑定检查。可以使用CV_DISABLE_OPTIMIZATION选项禁用多种优化:
- 一些第三方库(例如IPP、Lapack、Eigen)
- 显式矢量化实现(通用内部函数、原始内部函数等)
- 调度的优化
- 显式循环展开
3.Static build
BUILD_SHARED_LIBS选项控制是生成动态(.dll,.so,.dylib)库还是静态(.a,.lib)库。默认值取决于目标平台,在大多数情况下为on。
cmake -DBUILD_SHARED_LIBS=OFF ../opencv
ENABLE_PIC设置CMAKE_POSITION_INDEPENDENT_CODE选项。它启用或禁用“位置无关代码”的生成。在构建动态库或要链接到动态库的静态库时,必须启用此选项。默认值为ON。
4.Generate pkg-config info
OPENCV_GENERATE_PKGCONFIG选项启用.pc文件生成以及标准CMake包。此文件对于不使用CMake进行生成的项目非常有用。
cmake -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv
5.Build tests, samples and applications
有两种测试:准确性(opencv_test_)和性能(opencv_perf_)。默认情况下启用测试和应用程序。默认情况下未生成示例,应显式启用。相应的cmake选项:
cmake \
-DBUILD_TESTS=ON \
-DBUILD_PERF_TESTS=ON \
-DBUILD_EXAMPLES=ON \
-DBUILD_opencv_apps=ON \
../opencv
6.Build limited set of modules
每个模块都是模块目录的子目录。可以禁用一个模块:
cmake -DBUILD_opencv_calib3d=OFF ../opencv
相反的选择是只构建指定的模块及其依赖的所有模块:
cmake -DBUILD_LIST=calib3d,videoio,ts ../opencv
在本例中,我们请求了3个模块,配置脚本已自动确定所有依赖项:
-- OpenCV modules:
-- To be built: calib3d core features2d flann highgui imgcodecs imgproc ts videoio
7.依赖库下载
配置脚本可以尝试从internet下载其他库和文件,如果失败,相应的功能将被关闭。在某些情况下,可能会发生配置错误。默认情况下,所有文件都首先下载到/。缓存目录,然后解压缩或复制到构建目录。可以通过设置环境变量或配置选项来更改下载缓存位置:
export OPENCV_DOWNLOAD_PATH=/tmp/opencv-cache
cmake ../opencv
# or
cmake -DOPENCV_DOWNLOAD_PATH=/tmp/opencv-cache ../opencv
如果通过代理访问,则应在运行cmake之前设置相应的环境变量:
export http_proxy=<proxy-host>:<port>
export https_proxy=<proxy-host>:<port>
下载过程的完整日志可以在构建目录-CMakeDownloadLog.txt中找到。此外,对于每次失败的下载,将向构建目录中的助手脚本添加一个命令,例如download_with_wget.sh。用户可以按原样运行这些脚本或根据需要进行修改。
功能特性和相关性
有许多可选的依赖项和功能可以打开或关闭。cmake有一个特殊的选项,允许打印所有可用的配置参数:
cmake -LH ../opencv
有三种选项用于控制库的依赖关系,它们具有不同的前缀:
- 以with_启用或禁用依赖项开始的选项
- 从BUILD_启用或禁用构建以及使用OpenCV附带的第三方库开始的选项
- 以HAVE_开头的选项表示已启用依赖项,如果无法使用自动检测,则可以使用该选项手动启用依赖项。
启用WITH_选项时:
- 如果BUILD_选项已启用,将构建第三方库并启用=>HAVE_设置为ON
- 如果BUILD_选项被禁用,则第三方库将被检测并启用(如果找到)=>HAVE_设置为ON(如果找到依赖项)
1.CUDA支持
WITH_CUDA (default: OFF)
许多算法已经使用CUDA加速实现,这些功能位于单独的模块中。CUDA工具包必须从NVIDIA官方网站安装。对于早于3.9的cmake版本,OpenCV使用自己的cmake/FindCUDA。cmake脚本,用于较新版本-与cmake一起打包的版本。其他选项可用于控制构建过程,例如CUDA_GENERATION或CUDA_ARCH_BIN。这些参数尚未记录,请咨询cmake/OpenCVDetectCUDA。cmake脚本获取详细信息。
2.OpenCL支持
WITH_OPENCL (default: ON)
多种OpenCL加速算法可通过所谓的“透明API(T-API)”获得。此集成在用户级别使用与常规CPU实现相同的功能。如果输入和输出图像参数作为不透明的cv::UMat对象传递,则切换到OpenCL执行分支。更多信息可以在简介和OpenCL支持中找到
在构建时,此功能没有任何先决条件。在运行时,需要一个工作的OpenCL运行时,运行clinfo和/或opencv_version–OpenCL命令来检查它。OpenCL集成的一些参数可以使用环境变量进行修改,例如OPENCV_OpenCL_DEVICE。然而,还没有关于该特性的完整文档,因此请检查modules/core/src/ocl中的源代码。有关详细信息,请参阅cpp文件。
3.图像读写(imgcodecs module)
OpenCV可以在没有任何第三方库帮助的情况下读取以下格式:
- BMP
- HDR (WITH_IMGCODEC_HDR)
- Sun Raster (WITH_IMGCODEC_SUNRASTER)
- PPM, PGM, PBM, PFM (WITH_IMGCODEC_PXM, WITH_IMGCODEC_PFM)
读取这些格式图像所需的所有库都包含在OpenCV中,如果在配置阶段找不到,将自动构建。相应的BUILD_*选项将强制构建和使用自己的库,它们在某些平台(例如Windows)上默认启用。
(1)GDAL integration
WITH_GDAL (default: OFF)
GDAL是一个更高级别的库,支持读取多种文件格式,包括PNG、JPEG和TIFF。它在打开文件时具有更高的优先级,并且可以覆盖其他后端。将使用cmake包机制搜索此库,确保正确安装或手动设置GDAL_DIR环境或cmake变量。
(2)GDCM integration
WITH_GDCM (default: OFF)
通过GDCM库启用DICOM医学图像格式支持。将使用cmake包机制搜索此库,确保正确安装或手动设置GDCM_DIR环境或cmake变量。
4.视频读写 (videoio module)
(1)Video4Linux
WITH_V4L (Linux; default: ON )
使用Video4Linux API从相机捕获图像。必须安装Linux内核标头。
(2)FFmpeg
WITH_FFMPEG (default: ON)
与FFmpeg库集成,用于解码和编码视频文件和网络流。这个库可以读写许多流行的视频格式。它由几个组件组成,这些组件必须作为构建的先决条件安装:
- avcodec
- avformat
- avutil
- swscale
- avresample (optional)
例外情况是Windows平台,其中包含FFmpeg的预构建插件库将在配置阶段下载,并与所有生成的库一起复制到bin文件夹。
(3)GStreamer
WITH_GSTREAMER (default: ON)
支持与GStreamer库集成,用于解码和编码视频文件,从摄像机和网络流中捕获帧。可以安装许多插件来扩展支持的格式列表。OpenCV允许运行作为字符串传递给cv::VideoCapture和cv::Video Writer对象的任意GStreamer管道。各种GStreamer插件在不同平台上提供硬件加速视频处理。
(4)Microsoft Media Foundation
WITH_MSMF (Windows; default: ON)
启用使用Windows内置Media Foundation框架的MSMF后端。可用于从相机捕获帧,解码和编码视频文件。此后端具有硬件加速处理支持(WITH_MSMF_DXVA选项,默认为ON)。
(5)DirectShow
WITH_DSHOW (Windows; default: ON)
此后端使用旧的DirectShow框架。它只能用于从相机捕捉帧。它现在被弃用,转而支持MSMF后端,尽管两者都可以在同一版本中启用。
(6)AVFoundation
WITH_AVFOUNDATION (Apple; default: ON)
AVFoundation框架是苹果平台的一部分,可用于从相机捕获帧、编码和解码视频文件。
(7)Other backends
有多种不太流行的框架可以用来读写视频。每个都需要安装相应的库或SDK。
5.多线程后端支持
一些OpenCV算法可以使用多线程来加速处理。OpenCV可以使用线程后端之一构建。
OpenCV可以从GitHub下载并构建TBB库,该功能可以通过build_TBB选项启用。
6.GUI界面显示后端支持 (highgui module)
OpenCV依赖于各种GUI库来绘制窗口。
7.深度学习神经网络后端支持(dnn module)
OpenCV有自己的DNN推理模块,它有自己的内置引擎,但也可以使用其他库进行优化处理。可以在单个构建中启用多个后端。选择在运行时自动或手动进行。
8.库安装与位置
选项可用于控制是否安装库的一部分:
以下选项允许相对于安装前缀修改组件的安装位置。这些选项的默认值取决于平台和其他选项,请检查cmake/OpenCVInstallLayout。cmake文件获取详细信息。
文章来源:https://www.toymoban.com/news/detail-596501.html
9.其他功能
文章来源地址https://www.toymoban.com/news/detail-596501.html
到了这里,关于使用cmake编译opencv过程中的可选参数说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!