獲取opencv源碼 git clone git@github.com:opencv/opencv.git
獲取opencv_contrib源碼 git clone git@github.com:opencv/opencv_contrib.git
列舉全部tag git tag -l
html
這裏以安裝3.4.7爲例 git checkout tags/3.4.7
linux
opencv_contrib一樣使用此方法檢出對應的版本源碼,注意版本號嚴格一致,不然會出現問題ios
爲了不污染文件,首先建立一個用於存放編譯產生文件的目錄 mkdir build
cd build
c++
在該目錄下運行cmake cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local/opencv347 -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ ..
git
- -DOPENCV_GENERATE_PKGCONFIG=ON opencv4默認不生產pc文件,須要開啓此項
- -DCMAKE_INSTALL_PREFIX=/usr/local/opencv347 opencv的安裝路徑,能夠省略,將安裝到默認/usr/local目錄
- -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ 將 opencv 和 opencv_contrib 一塊兒編譯,若是不須要 opencv_contrib 能夠將此項去掉
而後是一段等待 github
成功後執行以下命令開始編譯,這裏開啓了8個線程 make -j8
ubuntu
可能會出現以下錯誤app
[ 8%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/util/type_resolver_util.cc.o [ 8%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/wire_format.cc.o [ 8%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/wrappers.pb.cc.o [ 8%] Linking CXX static library ../lib/liblibprotobuf.a make[2]: 離開目錄「/home/explorer/workbench/opensource/opencv/opencv/build」 [ 8%] Built target libprotobuf make[1]: 離開目錄「/home/explorer/workbench/opensource/opencv/opencv/build」 make: *** [Makefile:163:all] 錯誤 2
以及gcc fatal erroride
[ 1%] Building C object 3rdparty/ippiw/CMakeFiles/ippiw.dir/src/iw_image.c.o In file included from /home/explorer/workbench/opensource/opencv/opencv/modules/core/src/precomp.hpp:55, from /home/explorer/workbench/opensource/opencv/opencv/build/modules/core/opencv_core_pch_dephelp.cxx:1: /home/explorer/workbench/opensource/opencv/opencv/modules/core/include/opencv2/core/private.hpp:66:12: 致命錯誤:Eigen/Core:沒有那個文件或目錄 66 | # include <Eigen/Core> | ^~~~~~~~~~~~ 編譯中斷。 make[2]: *** [modules/core/CMakeFiles/opencv_core_pch_dephelp.dir/build.make:63:modules/core/CMakeFiles/opencv_core_pch_dephelp.dir/opencv_core_pch_dephelp.cxx.o] 錯誤 1 make[2]: 離開目錄「/home/explorer/workbench/opensource/opencv/opencv/build」 make[1]: *** [CMakeFiles/Makefile2:3978:modules/core/CMakeFiles/opencv_core_pch_dephelp.dir/all] 錯誤 2 make[1]: *** 正在等待未完成的任務.... [ 1%] Building C object 3rdparty/ippiw/CMakeFiles/ippiw.dir/src/iw_image_color_convert_all.c.o cc1: 警告:‘-Werror=’ argument ‘-Werror=non-virtual-dtor’ is not valid for C cc1: 警告:‘-Werror=’ argument ‘-Werror=non-virtual-dtor’ is not valid for C In file included from /home/explorer/workbench/opensource/opencv/opencv/modules/core/test/test_precomp.hpp:12, from /home/explorer/workbench/opensource/opencv/opencv/build/modules/core/opencv_test_core_pch_dephelp.cxx:1: /home/explorer/workbench/opensource/opencv/opencv/modules/core/include/opencv2/core/private.hpp:66:12: 致命錯誤:Eigen/Core:沒有那個文件或目錄 66 | # include <Eigen/Core> | ^~~~~~~~~~~~ 編譯中斷。 make[2]: *** [modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/build.make:63:modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/opencv_test_core_pch_dephelp.cxx.o] 錯誤 1 make[2]: 離開目錄「/home/explorer/workbench/opensource/opencv/opencv/build」 make[1]: *** [CMakeFiles/Makefile2:3868:modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/all] 錯誤 2 [ 1%] Building C object 3rdparty/ippiw/CMakeFiles/ippiw.dir/src/iw_image_color_convert_rgbs.c.o cc1: 警告:‘-Werror=’ argument ‘-Werror=non-virtual-dtor’ is not valid for C In file included from /home/explorer/workbench/opensource/opencv/opencv/modules/ts/src/precomp.hpp:4, from /home/explorer/workbench/opensource/opencv/opencv/build/modules/ts/opencv_ts_pch_dephelp.cxx:1: /home/explorer/workbench/opensource/opencv/opencv/modules/core/include/opencv2/core/private.hpp:66:12: 致命錯誤:Eigen/Core:沒有那個文件或目錄 66 | # include <Eigen/Core> | ^~~~~~~~~~~~ 編譯中斷。
解決辦法 sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
工具
https://github.com/opencv/opencv/issues/14868
編譯到50%左右可能會遇到
libopencv_core.so.3.4.7: undefined reference to `cblas_dgemm'
https://github.com/opencv/opencv/issues/14323
cmake -D CMAKE_EXE_LINKER_FLAGS=-lcblas -D WITH_TBB=ON -D WITH_OPENMP=ON -D WITH_IPP=ON -D WITH_CUDA=OFF -D ENABLE_CXX11=1 -D BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local/opencv347 -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ ..
而後執行 sudo make install
配置
cd /etc/ld.so.conf.d/ sudo touch opencv347.conf # 根據安裝位置 sudo sh -c 'echo "/usr/local/opencv347/lib" > opencv347.conf' sudo ldconfig
複製pc文件 sudo cp -f /usr/local/opencv347/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/opencv347.pc
測試一下 pkg-config --modversion opencv347
測試程序
cpp
#include <opencv2/core.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char **argv) { cout << "OpenCV version : " << CV_VERSION << endl; cout << "Major version : " << CV_MAJOR_VERSION << endl; cout << "Minor version : " << CV_MINOR_VERSION << endl; cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl; return 0; }
cmake
cmake_minimum_required(VERSION 3.14) project(opencvhelloworld) set(CMAKE_CXX_STANDARD 14) find_package( OpenCV 3.4.7 REQUIRED ) add_executable(opencvhelloworld main.cpp) target_link_libraries( opencvhelloworld ${OpenCV_LIBS} )
運行後能夠看到opencv版本號
cmakelist文件修改find_package( OpenCV 3.4.7 REQUIRED )
能夠引入其餘版本
cmake
cmake_minimum_required(VERSION 3.14) project(opencvhelloworld) set(CMAKE_CXX_STANDARD 14) find_package( OpenCV 4 REQUIRED ) add_executable(opencvhelloworld main.cpp) target_link_libraries( opencvhelloworld ${OpenCV_LIBS} )
這個是經過pacman安裝的4.1.1,一樣能夠使用此方法引入
參考文獻
- Arch / Manjaro Linux下 Opencv 編譯\ 配置\ 查看
- 如何編譯 opencv3 和 opencv_contrib(Linux)
- ubuntu16.04下opencv3.2和opencv_contrib編譯安裝
- OpenCV_contrib模塊概述
- CMakeLists.txt添加opencv庫注意事項
- CMake找不到opencv庫解決辦法
- CMakeLists.txt添加opencv庫注意事項
- Set Opencv path for a c++ project using Cmake
- How to Have Multiple Versions of OpenCV Side by Side
- cmake簡明使用指南
- linux下編譯C++寫的opencv程序
- Linux下使用自定義路徑來運行OpenCV
- 源碼包的安裝與pkg-config
- pkg-config 維基百科,自由的百科全書
- 理解 Linux中的pkg-config 工具
- /etc/ld.so.conf.d/目錄下文件的做用
- linux環境下安裝opencv (c++) 編譯undefined reference錯誤的解決辦法
- c – 錯誤:’create’不是’cv :: Tracker’的成員
- 如何讓gcc的編譯錯誤信息以英文的方式輸出
- 如何在Python和C ++中輸出OpenCV版本號
- opencv 跑KCF跟蹤 配置opencv_contrib過程當中遇到的坑
-- found Intel IPP (ICV version): 2019.0.0 [2019.0.0 Gold] -- at: /home/explorer/workbench/opensource/opencvfromgit/opencv/build/3rdparty/ippicv/ippicv_lnx/icv -- found Intel IPP Integration Wrappers sources: 2019.0.0 -- at: /home/explorer/workbench/opensource/opencvfromgit/opencv/build/3rdparty/ippicv/ippicv_lnx/iw -- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off -- Could NOT find Atlas (missing: Atlas_BLAS_LIBRARY) -- Looking for sgemm_ -- Looking for sgemm_ - not found -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- Looking for sgemm_ -- Looking for sgemm_ - found -- Found BLAS: /lib64/libblas.so -- Looking for cheev_ -- Looking for cheev_ - not found -- Looking for cheev_ -- Looking for cheev_ - found -- A library with LAPACK API found. -- LAPACK(LAPACK/Generic): LAPACK_LIBRARIES: /lib64/liblapack.so;/lib64/libblas.so -- LAPACK(LAPACK/Generic): Support is enabled.
Scanning dependencies of target opencv_phase_unwrapping Scanning dependencies of target opencv_imgcodecs /usr/bin/ld: ../../lib/libopencv_core.so.3.4.7: undefined reference to `cblas_zgemm' /usr/bin/ld: ../../lib/libopencv_core.so.3.4.7: undefined reference to `cblas_sgemm' /usr/bin/ld: ../../lib/libopencv_core.so.3.4.7: undefined reference to `cblas_dgemm' /usr/bin/ld: ../../lib/libopencv_core.so.3.4.7: undefined reference to `cblas_cgemm' collect2: 錯誤:ld 返回 1 make[2]: *** [apps/version/CMakeFiles/opencv_version.dir/build.make:87:bin/opencv_version] 錯誤 1 make[2]: 離開目錄「/home/explorer/workbench/opensource/opencvfromgit/opencv/build」 make[1]: *** [CMakeFiles/Makefile2:20743:apps/version/CMakeFiles/opencv_version.dir/all] 錯誤 2 make[1]: *** 正在等待未完成的任務.... make[2]: 離開目錄「/home/explorer/workbench/opensource/opencvfromgit/opencv/build」 make[2]: 進入目錄「/home/explorer/workbench/opensource/opencvfromgit/opencv/build」 [ 29%] Building CXX object modules/phase_unwrapping/CMakeFiles/opencv_phase_unwrapping.dir/src/histogramphaseunwrapping.cpp.o make[2]: 離開目錄「/home/explorer/workbench/opensource/opencvfromgit/opencv/build」 make[2]: 進入目錄「/home/explorer/workbench/opensource/opencvfromgit/opencv/build」 [ 29%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/loadsave.cpp.o [ 29%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/utils.cpp.o [ 29%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_base.cpp.o