由於最近要在OpenCV3中使用SIFT和SURF特征提取,而自從OpenCV2升級到OpenCV3版本后,SIFT、SURF等這些算法都被移出opencv默認項目庫,而被放到叫opencv_contrib的項目庫。因此需要手動下載opencv和opencv_contrib的源碼,然后將兩個源碼放在一起手動編譯安裝。
由於我的電腦是VMware虛擬機跑的ubuntu18.04,並且ubuntu18.04中安裝了ROS-melodic,而ROS-melodic裝完后默認就把opencv-3.2.0版本順帶安裝好了。所以,為了與ROS-melodic里面自帶的opencv-3.2.0版本保持一致,我是下載了opencv-3.2.0和opencv_contrib-3.2.0源碼,手動編譯與安裝,來覆蓋ROS-melodic里面自帶的opencv-3.2.0版本。下面我列出了我的環境:
- VMware虛擬機
- ubuntu18.04
- opencv-3.2.0
- opencv_contrib-3.2.0
1.下載opencv-3.2.0和opencv_contrib-3.2.0源碼
去github下載就行了,下載地址如下:
- opencv-3.2.0下載地址: https://github.com/opencv/opencv/tree/3.2.0
- opencv_contrib-3.2.0下載地址: https://github.com/opencv/opencv_contrib/tree/3.2.0
下載好后將這兩個文件同時解壓到同個文件夾下,我是解壓在opencv_install這樣一個文件夾,如下圖所示。
2.安裝相關依賴
在編譯和安裝opencv源碼之前,需要先安裝相關依賴庫,安裝命令如下:
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
上面命令執行會報錯,錯誤說libjaster-dev無法安裝,解決辦法如下:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" sudo apt update sudo apt install libjasper1 libjasper-dev
3.用cmake-gui工具配置opencv編譯參數
(1)安裝cmake-gui工具
在正式編譯opencv源碼之前,需要對opencv中的CMake參數做設置,推薦用cmake-gui工具配置。先安裝cmake-gui工具,如下命令:
sudo apt-get install cmake-gui
(2)設置cmake參數
打開終端,輸入下面的命令,啟動cmake-gui工具:
cmake-gui
在打開的界面中,將where is the source code欄中設成opencv-3.2.0的路徑,將where to build the binaries欄中設成opencv-3.2.0/build的路徑,如下圖所示。
然后點擊Configure按鈕,進行配置。配置過程會報錯誤,錯誤說缺vgg_generated_48.i之類的,解決辦法是直接去網上下載vgg_generated_48.i這個文件,下載地址如下:
https://download.csdn.net/download/u013085286/10309843
下載好vgg_generated_48.i后,將這個文件復制到報錯中提示的路徑下就行了。以我的路徑為例,用下面的命令復制:
cp vgg_generated_48.i /home/ubuntu1804/Downloads/opencv_install/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/e8d0dcd54d1bcfdc29203d011a797179/vgg_generated_48.i
上面命令中路徑里面的e8d0dcd54d1bcfdc29203d011a797179根據你實際報錯提示為准,類似的缺這些文件的錯誤,去網上下對應的文件,同樣的方法解決就行了。
補齊了這些文件后, 然后再次點擊Configure按鈕,進行配置,應該就能正常配置了。
(3)設置cmake編譯參數
在界面中將一下幾個參數的取值設置好,具體參數和取值如下所示:
CMAKE_BUILD_TYPE參數取值Release,如下圖所示。
OPENCV_EXTRA_MODULES_PATH參數取值/home/ubuntu1804/Downloads/opencv_contrib-3.2.0/modules,這個路徑的前面幾個文件夾用你的實際路徑替代,如下圖所示。
CMAKE_INSTALL_PREFIX參數取值/usr/local,如下圖所示。
這里需要特別提一下,還需要將ENABLE_PRECOMPILED_HEADERS參數取值設成OFF。如果不關閉這個參數的話,后面編譯會報錯誤/usr/include/c++/7/cstdlib:75:15:fatal error:stdlib.h:No such file or direct.
上面這些編譯參數都設置好后,就可以點擊Generate按鈕,生成makefile文件。
4.編譯和安裝opencv
切換到opencv-3.2.0/build目錄,用make和make install編譯和安裝就行了。
cd ~/Downloads/opencv_install/opencv-3.2.0/build/ make sudo make install
當你執行完上面命令的時候,並看到100%的時候,恭喜你!安裝成功!