系統是ubuntu16,安裝方式網上資料一大把,這裡把基本流程介紹下,然後介紹下自己解決的問題:
先下載下傳,然後安裝各種依賴,然後:
(預先解決Q1,Q2的問題)
step1.生成makefile,如下是最基本的cmake選項,不用增加其他額外的就能安裝成功。
cd opencv-4.1.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release ..
(預先解決Q6, Q7, Q8的問題)
如果是同時安裝opencv和opencv_contrib,則先要把opencv_contrib解壓縮到opencv主安裝檔案夾的根目錄下,也就是opencv/opencv_contrib這樣的檔案夾嵌套和檔案名,這是接下來cmake語句的要求結構。然後把上面語句換成如下,其中cmake的編譯選項每一項都不能缺少。
cd opencv-4.1.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE:BOOL=ON ..
step2.編譯,make -j8,
step3.安裝,sudo make install
安裝過程可能的問題:
Q1. 編譯時提示ippicv庫無法下載下傳?
原因是github下載下傳太慢,解決辦法是手動下載下傳,然後随便放到什麼位置(我是放到opencv安裝檔案夾下),然後修改opencv安裝檔案/3rdparty/ippicv/ippicv.cmake檔案中如下标記的一行,也就是指定下載下傳檔案為本地檔案的路徑。
ocv_download(FILENAME ${OPENCV_ICV_NAME}
HASH ${OPENCV_ICV_HASH}
URL
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"file:///media/ubuntu/4430C54630C53FA2/SuLiang/Mysoftwares/opencv-4.1.0/" # 這行修改成自己路徑
DESTINATION_DIR "${THE_ROOT}"
ID IPPICV
STATUS res
UNPACK RELATIVE_URL)
Q2. 編譯時提示無法識别anaconda的庫檔案undefined reference to ZSTD_freeCStream’ //home/a401/anaconda3/lib/libtiff.so.5
解決辦法參考:https://blog.csdn.net/Splend520/article/details/97270438,也就是把build路徑時的跟annaconda環境變量去除。
echo $PATH #可以看到如下顯示的有跟anaconda相關的路徑
/home/ubuntu/anaconda3/bin:/home/ubuntu/anaconda3/condabin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/cuda-9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/cuda-9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # 去除
Q3. 安裝時提示無法拷貝檔案?
原因是權限問題,需要用sudo make install
Q4. 安裝好以後無法導入視訊類videoCapture?
原因是視訊庫”opencv2/videoio.hpp”沒有安裝,因為在highgui.hpp庫中,可以看到如下一段,其中opencv2/videoio.hpp是處于無法連結到源檔案的未安裝狀态。
#ifdef HAVE_OPENCV_VIDEOIO
#include “opencv2/videoio.hpp”
#endif
想了很多方法包括補充相關庫都沒效果,最後換一個opencv版本嘗試下。
于是解除安裝opncv3.5: 進入opencv的build安裝目錄, 運作sudo make uninstall即可。
然後安裝opencv4.1版本,發現在make -j8的編譯過程有built target opencv_videoio.
安裝完成後,正常。
Q5. 安裝好以後的導入
-
方式1:預先把安裝在/usr/local/lib和/usr/local/include/opencv的頭檔案和庫檔案添加到系統變量中,進而可以直接在程式中引用包含相關opencv頭檔案。
原因是系統隻會搜尋預設路徑/lib和/usr/lib的動态庫,其他路徑的動态庫無法被直接搜尋到.
-
方式2:不用預先把opencv的頭檔案和庫檔案加入系統變量,則需要在cmakelists中先包含安裝的頭檔案和庫檔案路徑,然後才可以在程式中引用包含相關opencv頭檔案。
以下是一個最簡CmakeLists, 注意:opencv4之後需要c++11的支援。
cmake_minimum_required(VERSION 3.5)
project(3000_start_opencv LANGUAGES CXX)
add_definitions(-std=c++11) #c++11
find_package( OpenCV 4.1.0 REQUIRED ) #opencv
include_directories( ${OpenCV_INCLUDE_DIRS} ) #opencv
add_executable(3000_start_opencv main.cpp)
target_link_libraries( 3000_start_opencv ${OpenCV_LIBS}) #opencv
Q6. contrib庫編譯錯誤,編譯時會針對contrib包提示部分檔案下載下傳失敗,編譯失敗無法安裝:
主要的檔案包括:
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
需要手動去下載下傳,然後拷貝到opencv_contrib/modules/xfeatures2d/src/路徑下即可
參考的下載下傳路徑可以搜尋到,這裡就不提供了。
Q7. contrib庫編譯時會報錯找不到contrib測試時需要的opencv/module包裡的檔案:~/opencv-4.2.0/opencv_contrib/modules/xfeatures2d/test/test_features2d.cpp:51:62: fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
也就是找不到這個檔案test_detectors_regression.impl.hpp但我在features2d/test/路徑下能找到這個檔案。根本原因是在contrib安裝時無法連結到opencv包裡邊的test支援檔案,解決辦法就是把所有缺失的相關檔案從opencv/modules/feature2d/test檔案夾都拷貝到opencv/contrib/modules/xfeatures2d/test檔案夾中,并且手動修改contrib中報錯的那幾個test_xxx檔案中頭檔案的include路徑,都從features/modules修改到本地,比如:
// #include "features2d/test/test_detectors_regression.impl.hpp"
// #include "features2d/test/test_descriptors_regression.impl.hpp"
// 上面是原代碼,修改為如下形式
#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
Q8. 安裝成功contrib庫,但調用SIFT算法依然報錯This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘create’
這是因為SIFT/SURF算法都受版權保護,不能直接使用,解決辦法參考:https://answers.opencv.org/question/201938/how-can-i-set-opencv_enable_nonfree-cmake-option-and-rebuild-the-library-in-function-create/
即需要在編譯時增加選項-D OPENCV_ENABLE_NONFREE:BOOL=ON