SIFT即尺度不變特徵變換,是用於圖像處理領域的一種描述。這種描述具備尺度不變性,可在圖像中檢測出關鍵點,是一種局部特徵描述子。
SIFT的尺度不變特徵變換在圖像特徵點匹配中十分關鍵,由於咱們從不一樣角度拍攝一個物體,物體的尺寸多少都會發生變化。可是在正常狀況下咱們連接的opencv庫裏面並無包含這個算法,須要咱們主動從新配置一遍。
使用環境:Ubuntu16_Qt_C++_opencv3.2.0_opencvcontrib3.2.0
1.卸載以前make配置的opencv
rm -rf /usr/local
/usr/local爲以前make文件的默認路徑,若是以前有設置爲其它路徑,則卸載相對應的路徑下的文件夾
2.在官網下載opencv和opencv_contrib並解壓,注意二者要同一個版本。筆者使用的版本時3.2.0。
筆者在嘗試了許多不一樣版本後,發現3.4以上的版本彷佛由於版權緣由,在最後成功make並在.pro文件連接上後,雖然能inculde <xfeature2d.hpp>,而且在使用SIFT類使可以自動補全,可是在運行時仍是會報錯。
報錯的具體內容以下:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘cv::xfeatures2d::SIFT::create’。
而後根據其提示,筆者也發現即便CMake時勾選上OPNECV_ENABLE_NONFREE,也仍是會報一樣的錯。最後才發現原來是版本的問題,在選擇3.4之前的版本彷佛就不會出現這個報錯。筆者推測應該是opencv開發人員在更新3.4的版本上在nonfree.hpp加入了一點內容,即若是判斷沒有版權,則輸出這段報錯內容,可能能夠經過修改一下這個頭文件來實如今3.4以上的版本使用SIFT等算法。
3.解壓完畢以後,首先是下載一些依賴包,不過在以前配置opencv的時候已經下載過了,因此直接跳過,而後就是經過cmake-gui界面進行make
mkdir build //在opencv3.4的文件夾下新建一個build文件夾
cd build
cmake-gui .. //打開cmake-gui圖形界面
source的路徑爲你的opencv文件夾的路徑,build即你新建的build文件夾的路徑,填寫好後configure,configure界面的選項按默認的來便可算法
configure以後再添加OPENCV_EXTRA_MOUDULES_PATH的路徑,即爲你下載的opencv_contrib文件夾裏面的moudules文件夾ui
CMAKE_BUILD_TYPE裏面填RELEASEthis
而後點擊generate,成功以後回到命令行界面的build路徑下
輸入make命令
筆者在make過程當中會遇到相似以下報錯命令行
翻譯過來就是缺乏***.i文件,解決方案就是手動將該文件下載,而後放到這個路徑下,而後從新輸入make命令便可。
具體的.i文件下載須要特殊的方法,能夠直接用我已經下載的現成的( ̄▽ ̄)"
連接:https://pan.baidu.com/s/11qltgnkuElInOKGVOr0SAg
提取碼:stw1
複製這段內容後打開百度網盤手機App,操做更方便哦!
另外一種類型的報錯就是缺乏.hpp文件啦,這種錯誤中缺失的.hpp文件咱們能夠在本地的硬盤裏面找到,而後手動複製粘貼這個.hpp文件。但這裏比較特殊,須要在上一級目錄即detail文件夾下,新建opencv2文件夾,而後再在opencv2文件夾裏新建xfeatures2d文件夾,最後在xfeatures2d文件夾下粘貼cuda.hpp,而後從新輸入make命令便可(哈哈,是否是很奇怪,但好像就是這樣才行,不要問我是怎麼知道的≡(▔﹏▔)≡)翻譯
解決了上面兩種報錯的類型,基本上就能夠make成功了
4.make成功後你能夠在/usr/local目錄下看到成功下載的文件,而後就是在Qt連接你成功下載的文件啦。具體就是新建項目,在.pro文件最後添加以下文本
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/lib*
5.而後就可使用SIFT等類啦┗|`O′|┛ 嗷~~
blog