OpenCV源码安装教程(兼容CUDA)
簡介
OpenCV是計(jì)算機(jī)視覺領(lǐng)域應(yīng)用非常廣泛的工具庫。而OpenCV Contrib庫是第三方非官方開發(fā)的擴(kuò)充庫,這個庫可以使用一些特殊算法,如物體跟蹤。和英偉達(dá)的CUDA配合,OpenCV可以更加高效。
運(yùn)行環(huán)境
- 操作系統(tǒng)為Ubuntu16.04,但是原則上適用于所有類似發(fā)行版甚至大多數(shù)Linux系統(tǒng)。
- CUDA需要事先安裝,通過nvcc -V查看是否安裝。
- CUDNN需要和CUDA版本配合安裝,通過cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2查看是否安裝,舊版本將cudnn_version.h換為cudnn.h。
安裝
依賴安裝
sudo apt-get update sudo apt-get install build-essential cmake unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran sudo apt-get install python3-dev源碼下載
通過下面的命令下載OpenCv和OpenCV Contrib的源碼,并切換到指定版本(可選,由于我這里是CUDA11,所以為了兼容安裝了一個較高的版本4.4.0)。
git clone https://github.com/opencv/opencv/ # 非最新版本使用下面的命令切換版本 cd opencv git checkout 4.4.0git clone https://github.com/opencv/opencv_contrib.git # 非最新版本使用下面的命令切換版本 cd opencv_contrib git checkout 4.4.0源碼編譯安裝
當(dāng)前目錄下有opencv和opencv_contrib兩個文件夾。
cd opencv mkdir build cd build接下里我們使用cmake進(jìn)行源碼編譯,但是需要指定GPU的計(jì)算能力,具體請查看官網(wǎng),部分如下圖。
我們使用下面的命令進(jìn)行編譯(使用的3090計(jì)算力為8.6),注意更改自己的安裝目錄、opencv_contrib目錄的路徑。
如果需要安裝Pyhon支持,則加入下面兩個選項(xiàng)。
-D HAVE_opencv_python3=ON \ -D PYTHON_EXECUTABLE=~/.virtualenvs/opencv_cuda/bin/python \當(dāng)然,如果你只需要安裝最簡版本的OpenCV,不需要安裝OpenCV Contrib,也不需要CUDA支持,那么請使用下面的命令。
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=~/opt/opencv -D BUILD_EXAMPLES=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..不過,配置過程大概率會出現(xiàn)如下的問題,請先按照步驟解決。
這個cmake過程中可能會有出現(xiàn)xfeatures2d模塊缺失boostdesc_bgm.i文件下載超時問題,也可能遇到ippicv_2019_lnx_intel64_general_20180723.tgz無法下載的問題,這些都是因?yàn)榫W(wǎng)絡(luò)限制無法下載文件導(dǎo)致的,因此我們可以新建一個目錄來存放我們預(yù)先下載好的這些文件,因此我們現(xiàn)在有如下三個目錄,分別為opencv、opencv_contrib和opencv_need,前面二者為源碼,后者為存放離線文件的目錄。
. ├── opencv ├── opencv_contrib └── opencv_need其中,opencv_need需要如下文件。這里為了方便大家的處理,我已經(jīng)將該目錄打包并上傳到CSDN的資源托管了,可以訪問鏈接下載。
. ├── boostdesc_bgm_bi.i ├── boostdesc_bgm_hd.i ├── boostdesc_bgm.i ├── boostdesc_binboost_064.i ├── boostdesc_binboost_128.i ├── boostdesc_binboost_256.i ├── boostdesc_lbgm.i ├── face_landmark_model.dat ├── ippicv_2019_lnx_intel64_general_20180723.tgz ├── vgg_generated_120.i ├── vgg_generated_48.i ├── vgg_generated_64.i └── vgg_generated_80.i然后,我們需要修改幾個配置文件,我這里以上面所述的三個文件夾所在目錄為出發(fā)點(diǎn),展示這三個文件路徑。將其中https://地址修改為opencv_need的路徑,我這里具體為file:///home/xxx/Downloads/opencv_src/opencv_need/。
opencv/3rdparty/ippicv/ippicv.cmake opencv_contrib/modules/xfeatures2d/cmake/download_boostdesc.cmake opencv_contrib/modules/xfeatures2d/cmake/download_vgg.cmake opencv_contrib/modules/face/CMakeLists.txt此時,重新進(jìn)行上面的cmake命令編譯應(yīng)該可以直接通過,我們使用make install來安裝OpenCV。
必要配置
此時,如果沒有報(bào)錯,我們將下面的語句寫入~/.bashrc文件中來添加環(huán)境變量,便于庫的定位。加入前兩條語句后,pkg-config定位OpenCV,而加入第三條語句后,能在CMakeLists.txt中直接通過FIND_PACKAGE(OpenCV REQUIRED)命令找到OpenCV。
export PKG_CONFIG_PATH=~/opt/opencv/lib/pkgconfig export LD_LIBRARY_PATH=~/opt/opencv/lib export OpenCV_DIR=~/opt/opencv/注意更新后要通過source ~/.bashrc重新激活環(huán)境變量,然后使用下面的命令確認(rèn)OpenCV版本,安裝正確的話該命令會輸出版本號。
pkg-config --modversion opencv4測試安裝
請構(gòu)建如下一個目錄,用于代碼測試,其中demo.jpg隨便找一個測試圖片即可。
. ├── CMakeLists.txt ├── demo.jpg └── main.cppmain.cpp內(nèi)容如下。
#include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std;int main(int argc, char** argv) {//讀取照片Mat image = imread("demo.jpg");//檢測失誤if (image.empty()){cout << "Could not open or find the image" << endl;cin.get(); //等待鍵盤輸入return -1;}string windowName = "OpenCV Test"; //窗口名稱namedWindow(windowName); //創(chuàng)建新窗口imshow(windowName, image); //使用新窗口顯示照片waitKey(0); //等待鍵盤輸入destroyWindow(windowName); //關(guān)閉所有窗口return 0; }CMakeLists.txt內(nèi)容如下。
# cmake needs this line cmake_minimum_required(VERSION 3.1)# Enable C++11 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED TRUE)# Define project name project(main)# Find OpenCV, you may need to set OpenCV_DIR variable # to the absolute path to the directory containing OpenCVConfig.cmake file # via the command line or GUI find_package(OpenCV REQUIRED)# If the package has been found, several variables will # be set, you can find the full list with descriptions # in the OpenCVConfig.cmake file. # Print some message showing some of them message(STATUS "OpenCV library status:") message(STATUS " config: ${OpenCV_DIR}") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")# Declare the executable target built from your sources add_executable(main main.cpp)# Link your application with OpenCV libraries target_link_libraries(main LINK_PRIVATE ${OpenCV_LIBS})然后順次執(zhí)行下面的命令,成功顯示圖像則安裝測試成功。
cmake . make ./main總結(jié)
本文介紹了如何在自己的家目錄中安裝OpenCV,如果OpenCV Contrib和CUDA支持安裝有問題,建議按照最簡版本先安裝使用,很多場景其實(shí)只需要最簡版本即可。
總結(jié)
以上是生活随笔為你收集整理的OpenCV源码安装教程(兼容CUDA)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法模板-广度优先遍历
- 下一篇: TensorRT安装教程