環(huán)境說明
- opencv版本:4.5.5
介紹
通過源碼編譯opencv時,cmake可以帶有很多可選參數(shù),這里對這些可選參數(shù)進行說明。
配置選項可以通過幾種不同的方式設置:
- 命令行:cmake-Doption=value…
- 初始緩存文件:cmake-C my_options.txt…
- 通過Cmake-GUI進行設定
在本參考中,我們將使用常規(guī)命令行。
# 初始化配置文件
cmake ../opencv
# 打印所有選項
cmake -L
# 打印所有選項,附帶說明文檔
cmake -LH
# 打印所有選項,包括高級
cmake -LA
最常用和有用的是以with_、ENABLE_、BUILD_、OPENCV_開頭的選項。默認值因平臺和其他選項值而異。
常規(guī)選項
1.Build with extra modules
OPENCV_EXTRA_MODULES_PATH選項包含一個分號分隔的目錄列表,其中包含將添加到生成中的額外模塊。模塊目錄必須具有兼容的布局和CMakeList.txt。僅支持0級和1級深層模塊位置。
# 使用opencv_contrib中的所有模塊進行構(gòu)建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# 使用opencvcontrib模塊之一構(gòu)建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/bgsegm ../opencv
# 使用兩個自定義模塊構(gòu)建(必須在bash中轉(zhuǎn)義分號)
cmake -DOPENCV_EXTRA_MODULES_PATH=../my_mod1\;../my_mod2 ../opencv
2.Debug build
CMAKE_BUILD_TYPE選項可用于啟用調(diào)試構(gòu)建;生成的二進制文件將包含調(diào)試符號,大多數(shù)編譯器優(yōu)化將被關閉。若要在Release build中啟用調(diào)試符號,請啟用build_WITH_debug_INFO選項。
在某些平臺(如Linux)上,必須在配置階段設置構(gòu)建類型:
cmake -DCMAKE_BUILD_TYPE=Debug ../opencv
cmake --build .
在其他平臺上,可以在同一構(gòu)建目錄(例如Visual Studio、XCode)中生成不同類型的構(gòu)建:
cmake <options> ../opencv
cmake --build . --config Debug
如果您使用GNU libstdc++(GCC的默認值),您可以啟用ENABLE_GNU_STL_DEBUG選項,那么C++庫將在調(diào)試模式下使用,例如,索引將在向量元素訪問期間進行綁定檢查??梢允褂肅V_DISABLE_OPTIMIZATION選項禁用多種優(yōu)化:
- 一些第三方庫(例如IPP、Lapack、Eigen)
- 顯式矢量化實現(xiàn)(通用內(nèi)部函數(shù)、原始內(nèi)部函數(shù)等)
- 調(diào)度的優(yōu)化
- 顯式循環(huán)展開
3.Static build
BUILD_SHARED_LIBS選項控制是生成動態(tài)(.dll,.so,.dylib)庫還是靜態(tài)(.a,.lib)庫。默認值取決于目標平臺,在大多數(shù)情況下為on。
cmake -DBUILD_SHARED_LIBS=OFF ../opencv
ENABLE_PIC設置CMAKE_POSITION_INDEPENDENT_CODE選項。它啟用或禁用“位置無關代碼”的生成。在構(gòu)建動態(tài)庫或要鏈接到動態(tài)庫的靜態(tài)庫時,必須啟用此選項。默認值為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
相反的選擇是只構(gòu)建指定的模塊及其依賴的所有模塊:
cmake -DBUILD_LIST=calib3d,videoio,ts ../opencv
在本例中,我們請求了3個模塊,配置腳本已自動確定所有依賴項:
-- OpenCV modules:
-- To be built: calib3d core features2d flann highgui imgcodecs imgproc ts videoio
7.依賴庫下載
配置腳本可以嘗試從internet下載其他庫和文件,如果失敗,相應的功能將被關閉。在某些情況下,可能會發(fā)生配置錯誤。默認情況下,所有文件都首先下載到/。緩存目錄,然后解壓縮或復制到構(gòu)建目錄??梢酝ㄟ^設置環(huán)境變量或配置選項來更改下載緩存位置:
export OPENCV_DOWNLOAD_PATH=/tmp/opencv-cache
cmake ../opencv
# or
cmake -DOPENCV_DOWNLOAD_PATH=/tmp/opencv-cache ../opencv
如果通過代理訪問,則應在運行cmake之前設置相應的環(huán)境變量:
export http_proxy=<proxy-host>:<port>
export https_proxy=<proxy-host>:<port>
下載過程的完整日志可以在構(gòu)建目錄-CMakeDownloadLog.txt中找到。此外,對于每次失敗的下載,將向構(gòu)建目錄中的助手腳本添加一個命令,例如download_with_wget.sh。用戶可以按原樣運行這些腳本或根據(jù)需要進行修改。
功能特性和相關性
有許多可選的依賴項和功能可以打開或關閉。cmake有一個特殊的選項,允許打印所有可用的配置參數(shù):
cmake -LH ../opencv
有三種選項用于控制庫的依賴關系,它們具有不同的前綴:
- 以with_啟用或禁用依賴項開始的選項
- 從BUILD_啟用或禁用構(gòu)建以及使用OpenCV附帶的第三方庫開始的選項
- 以HAVE_開頭的選項表示已啟用依賴項,如果無法使用自動檢測,則可以使用該選項手動啟用依賴項。
啟用WITH_選項時:
- 如果BUILD_選項已啟用,將構(gòu)建第三方庫并啟用=>HAVE_設置為ON
- 如果BUILD_選項被禁用,則第三方庫將被檢測并啟用(如果找到)=>HAVE_設置為ON(如果找到依賴項)
1.CUDA支持
WITH_CUDA (default: OFF)
許多算法已經(jīng)使用CUDA加速實現(xiàn),這些功能位于單獨的模塊中。CUDA工具包必須從NVIDIA官方網(wǎng)站安裝。對于早于3.9的cmake版本,OpenCV使用自己的cmake/FindCUDA。cmake腳本,用于較新版本-與cmake一起打包的版本。其他選項可用于控制構(gòu)建過程,例如CUDA_GENERATION或CUDA_ARCH_BIN。這些參數(shù)尚未記錄,請咨詢cmake/OpenCVDetectCUDA。cmake腳本獲取詳細信息。
2.OpenCL支持
WITH_OPENCL (default: ON)
多種OpenCL加速算法可通過所謂的“透明API(T-API)”獲得。此集成在用戶級別使用與常規(guī)CPU實現(xiàn)相同的功能。如果輸入和輸出圖像參數(shù)作為不透明的cv::UMat對象傳遞,則切換到OpenCL執(zhí)行分支。更多信息可以在簡介和OpenCL支持中找到
在構(gòu)建時,此功能沒有任何先決條件。在運行時,需要一個工作的OpenCL運行時,運行clinfo和/或opencv_version–OpenCL命令來檢查它。OpenCL集成的一些參數(shù)可以使用環(huán)境變量進行修改,例如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中,如果在配置階段找不到,將自動構(gòu)建。相應的BUILD_*選項將強制構(gòu)建和使用自己的庫,它們在某些平臺(例如Windows)上默認啟用。
(1)GDAL integration
WITH_GDAL (default: OFF)
GDAL是一個更高級別的庫,支持讀取多種文件格式,包括PNG、JPEG和TIFF。它在打開文件時具有更高的優(yōu)先級,并且可以覆蓋其他后端。將使用cmake包機制搜索此庫,確保正確安裝或手動設置GDAL_DIR環(huán)境或cmake變量。
(2)GDCM integration
WITH_GDCM (default: OFF)
通過GDCM庫啟用DICOM醫(yī)學圖像格式支持。將使用cmake包機制搜索此庫,確保正確安裝或手動設置GDCM_DIR環(huán)境或cmake變量。
4.視頻讀寫 (videoio module)
(1)Video4Linux
WITH_V4L (Linux; default: ON )
使用Video4Linux API從相機捕獲圖像。必須安裝Linux內(nèi)核標頭。
(2)FFmpeg
WITH_FFMPEG (default: ON)
與FFmpeg庫集成,用于解碼和編碼視頻文件和網(wǎng)絡流。這個庫可以讀寫許多流行的視頻格式。它由幾個組件組成,這些組件必須作為構(gòu)建的先決條件安裝:
- avcodec
- avformat
- avutil
- swscale
- avresample (optional)
例外情況是Windows平臺,其中包含F(xiàn)Fmpeg的預構(gòu)建插件庫將在配置階段下載,并與所有生成的庫一起復制到bin文件夾。
(3)GStreamer
WITH_GSTREAMER (default: ON)
支持與GStreamer庫集成,用于解碼和編碼視頻文件,從攝像機和網(wǎng)絡流中捕獲幀??梢园惭b許多插件來擴展支持的格式列表。OpenCV允許運行作為字符串傳遞給cv::VideoCapture和cv::Video Writer對象的任意GStreamer管道。各種GStreamer插件在不同平臺上提供硬件加速視頻處理。
(4)Microsoft Media Foundation
WITH_MSMF (Windows; default: ON)
啟用使用Windows內(nèi)置Media Foundation框架的MSMF后端??捎糜趶南鄼C捕獲幀,解碼和編碼視頻文件。此后端具有硬件加速處理支持(WITH_MSMF_DXVA選項,默認為ON)。
(5)DirectShow
WITH_DSHOW (Windows; default: ON)
此后端使用舊的DirectShow框架。它只能用于從相機捕捉幀。它現(xiàn)在被棄用,轉(zhuǎn)而支持MSMF后端,盡管兩者都可以在同一版本中啟用。
(6)AVFoundation
WITH_AVFOUNDATION (Apple; default: ON)
AVFoundation框架是蘋果平臺的一部分,可用于從相機捕獲幀、編碼和解碼視頻文件。
(7)Other backends
有多種不太流行的框架可以用來讀寫視頻。每個都需要安裝相應的庫或SDK。
5.多線程后端支持
一些OpenCV算法可以使用多線程來加速處理。OpenCV可以使用線程后端之一構(gòu)建。
OpenCV可以從GitHub下載并構(gòu)建TBB庫,該功能可以通過build_TBB選項啟用。
6.GUI界面顯示后端支持 (highgui module)
OpenCV依賴于各種GUI庫來繪制窗口。
7.深度學習神經(jīng)網(wǎng)絡后端支持(dnn module)
OpenCV有自己的DNN推理模塊,它有自己的內(nèi)置引擎,但也可以使用其他庫進行優(yōu)化處理??梢栽趩蝹€構(gòu)建中啟用多個后端。選擇在運行時自動或手動進行。
8.庫安裝與位置
選項可用于控制是否安裝庫的一部分:
以下選項允許相對于安裝前綴修改組件的安裝位置。這些選項的默認值取決于平臺和其他選項,請檢查cmake/OpenCVInstallLayout。cmake文件獲取詳細信息。文章來源:http://www.zghlxwxcb.cn/news/detail-596501.html
9.其他功能
文章來源地址http://www.zghlxwxcb.cn/news/detail-596501.html
到了這里,關于使用cmake編譯opencv過程中的可選參數(shù)說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!