opencv3和opencv_contrib手動(dòng)編譯(macos)
homebrew在國內(nèi)并不會(huì)被墻稚字,但是由于homebrew官方的bootles比較慢,而且homebrew有時(shí)候會(huì)選擇給你下源碼讓你手動(dòng)編譯,所以如果在國內(nèi)在macOS系統(tǒng)下進(jìn)行開發(fā)的朋友可以嘗試換國內(nèi)的中科大源和清華源
## 替換brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
## 替換homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bashrc
## 但是現(xiàn)在最新版本的macos使用的是zsh shell
所以略作修改
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
以下是我在opencv_contrib +opencv3.0.0配置過程中出現(xiàn)的問題和解決
之前我開發(fā)使用的是clion+Cmakelist.txt配置opencv4路徑的組合
但是當(dāng)我想要使用opencv封裝的sift函數(shù)的時(shí)候着憨,發(fā)現(xiàn)opencv3封裝的一部分特征檢測(cè)的代碼已經(jīng)被移動(dòng)到了xfeature2d函數(shù)庫下,而這個(gè)函數(shù)庫好像是在nonfree模塊下,但是我電腦上沒有添加opencv_contrib這個(gè)文件鹦蠕,導(dǎo)致直接調(diào)用會(huì)報(bào)錯(cuò)找不到我需要調(diào)用的函數(shù)的頭文件,然后開始了漫長的配置之路
1)資源下載
首先在抛,鑒于在我通過Homebrew安裝的opencv并沒有opencv_contrib钟病,我選擇了重新開始配置新的opencv環(huán)境
下載opencv和對(duì)應(yīng)版本的opencv_contrib , 編譯使用的cmake工具下載帶有GUI界面的即可
opencv下載地址提供(其實(shí)就是opencv在github的官方倉庫,自行選擇版本即可,但是要和opencv_contrib版本對(duì)應(yīng))
https://github.com/opencv/opencv/tree/3.4.8
- opencv_contrib下載的地址肠阱,我選用的是3.4.8版本
https://github.com/opencv/opencv_contrib/tree/3.4.8
2) 編譯安裝
這里參考了stackoverflow上大神給出的解決辦法
https://stackoverflow.com/questions/31822299/opencv-contrib-module-installation-on-mac
- 我們需要將下載下來的opencv-3.4.8和opencv_contrib-3.4.8文件放到一個(gè)文件夾下
- 在cmake(gui)中配置如上圖的路徑
我們需要在opencv-3.4.8下新建build文件夾來保存編譯文件
在cmake中添加路徑
點(diǎn)擊configure buttom
問題1:
IPPICV: Download: ippicv_2017u3_lnx_intel64_general_20180723.tgz
編譯程序會(huì)卡在這個(gè)提示信息票唆,最后顯示timeout超時(shí)退出了程序
下載的地址:
https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv
這個(gè)鏈接可能會(huì)過期,但是只要在github上找到你想要找的系統(tǒng)和版本即可
至于這個(gè)文件下載后放置的位置:opencv-3.3.0/3rdparty/ippicv/ippicv.cmake 這個(gè)文件可以用sublime Text打開
查找url形式 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"字段
將其更換為上述文件存儲(chǔ)的目錄名
即上面的" "中的內(nèi)容換成 "file:///home/usrname/install/" 而你下載的ippicv_2017u3_lnx_intel64_general_20180723.tgz就放在你電腦的/home/usrname/install目錄下
修改完成之后 再次進(jìn)行configure編譯 我這邊是提示了 hashcode不一致的warning
至于具體如何修改辖所,可以參見這個(gè)博客
https://blog.csdn.net/KayChanGEEK/article/details/79919417
具體閱讀opencv-3.4.8/build/CMakeDownloadLog.txt日志惰说,我直接跳過了這個(gè)步驟
因?yàn)槲野l(fā)現(xiàn)它好像是自行修正了,但后續(xù)編譯中還是會(huì)報(bào)相關(guān)warning缘回,但不影響成功編譯和函數(shù)調(diào)用
- 安裝opencv_contrib模塊
在cmake(GUI)的search中輸入extra
在value中輸入 /你的opencv_contrib地址/modules
點(diǎn)擊configure
編譯過程中再次出現(xiàn)問題
face_landmark_model.dat模塊下載超時(shí)
打開文件<opencv源代碼的路徑>/opencv_contrib/modules/face/CMakeLists.txt吆视,找到文件關(guān)于commit_hash的那一行,替換commit_hash進(jìn)行下載
https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/face_landmark_model.dat
替換為你本機(jī)下載該文件的上層目錄酥宴,原理同上面的ippicv文件
配置完成后點(diǎn)擊generate啦吧,顯示generate done
- 編譯
make -j4 這里j后參數(shù)可變,理論上表示用的核心數(shù)量
其他一些可能遇到的雜七雜八的(make)編譯過程錯(cuò)誤 (沒有遇到可以跳過)
Cmake error at
opencv_contrib-master/modules/datasets/CMakeLists.txt:7 (ocv_append_source_files_cxx_compiler_options):
Unknown CMake command "ocv_append_source_files_cxx_compiler_options".
-- Configuring incomplete, errors occurred!
See also "/home/sunhong/Downloads/opencv-3.4.1/my_build_dir/CMakeFiles/CMakeOutput.log".
See also "/home/sunhong/Downloads/opencv-3.4.1/my_build_dir/CMakeFiles/CMakeError.log".
解決辦法:
注釋掉:opencv_contrib-master/modules/datasets/CMakeLists.txt:7 (ocv_append_source_files_cxx_compiler_options):
之后又有報(bào)錯(cuò)說缺face_landmark_model.dat這個(gè)文件
修改自己對(duì)應(yīng)文件夾opencv_contrib/modules/face/CMakeLists.txt
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
報(bào)錯(cuò):
解決辦法: (stackoverflow大法好)
參考鏈接:
https://stackoverflow.com/questions/31822299/opencv-contrib-module-installation-on-mac
https://stackoverflow.com/questions/46884682/error-in-building-opencv-with-ffmpeg
空降此處
- 安裝
sudo make install
老淚縱橫拙寡,終于行了
- 安裝結(jié)果
頭文件在:/usr/local/include/opencv4/
lib在:/usr/local/lib
我采用的clion+cmakelist.txt的方式訪問opencv庫
cmake_minimum_required(VERSION 3.9)
project(cv) //項(xiàng)目名
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_executable(cv experiment.cpp) //項(xiàng)目名 運(yùn)行的函數(shù)名
target_link_libraries(cv ${OpenCV_LIBS})
xcode的配置方法可以參見以下鏈接
http://www.reibang.com/p/9fc82d0dcf0d
唯一的差別是
Header Search Paths設(shè)置為/usr/local/include/opencv4/
Library Search Paths設(shè)置為/usr/local/lib