Ubuntu下opencv編譯總結

  最近頻繁重裝Ubuntu系統o(╥﹏╥)o,對重裝Ubuntu涉及的opencv做個總結。

Ubuntu安裝依賴項

  cuda、cudnn等安裝這裏就不說了,主要爲通過終端執行的相關依賴項安裝指令,參考鏈接:
  ubuntu 18.04編譯opencv3.4.3 with python3.6 cuda9.2 gdal
  Ubuntu 18.04源碼編譯安裝OpenCV 4.0流程

sudo apt install -y build-essential cmake git pkg-config libopenexr-dev libblas-dev 
sudo apt install -y python-dev python-numpy libtbb2 libtbb-dev
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libjasper-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libavutil-dev

sudo apt install -y \
        libx264-dev \
        mesa-utils \
        libgtk2.0-dev \
        libxvidcore-dev \
        yasm \
        libxine2-dev \
        libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
        libv4l-dev \
        libfaac-dev \
        libmp3lame-dev \
        libopencore-amrnb-dev \
        libtheora-dev \
        libvorbis-dev \
        ffmpeg \
        libeigen3-dev libeigen3-doc \
		liblapack-dev \
        tesseract-ocr \
        tesseract-ocr-jpn \
        libgflags-dev \
        libleptonica-dev \
        libtesseract-dev \
        gphoto2 \
        liblapacke-dev \
        libgoogle-glog-dev \
        libprotobuf-dev \
        libprotoc-dev \
        protobuf-compiler \
        ccache \
        libgphoto2-dev \
        libavresample-dev \
        libatlas-base-dev \
        gfortran

  

下載安裝包

  下載opencv源碼:opencv的github鏈接
  下載opencv_contrib源碼:opencv_contrib的github鏈接(可以不用,看需要)
  需要注意,如果要編譯contrib,需要使contrib的版本號與opencv對應。下載完成後均解壓,放置到自己的目標位置。

  

編譯opencv動態庫(so)

  參考鏈接:openCV+opencv_contrib(編譯源碼)
  在opencv的解壓文件中,創建編譯文件保存的文件夾,如build,並在該文件夾中打開終端,執行:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=OFF \
      -D INSTALL_PYTHON_EXAMPLES=OFF \
      -D WITH_TBB=ON \
      -D WITH_OPENGL=ON \
      -D BUILD_TIFF=ON -D WITH_TIFF=ON \
      -D WITH_1394=OFF \
      -D WITH_GDAL=ON \
      -D WITH_CUDA=ON -D WITH_CUBLAS=ON -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES"\
      -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules/ \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      -D BUILD_EXAMPLES=OFF ..

  以上爲舉例,目前還未完全測試各條命令有效性,後續更新。
  其中PYTHON_DEFAULT_EXECUTABLE爲要安裝opencv的python路徑,一般Ubuntu中都有多個版本的python;
  CMAKE_INSTALL_PREFIX是編譯後相關so文件的放置位置,這個最好保持該設置;
  OPENCV_EXTRA_MODULES_PATH爲opencv_contrib中modules的路徑,如果不準備編譯opencv_contrib可以刪除這一項。如果要編譯的話需要注意,在cuda10的時候,cudacodec會出現nvcuvid.h找不到的情況,我將cudacodec模塊刪掉可以正常編譯,目前最新的opencv_contrib在2018年12月18日已修復了該bug,如果是使用該時間之後的版本應該可以正常編譯。

  生成makefile文件後,即可執行make操作,如果發現生成表中有數據不對或者生成出錯,需要將該文件夾中相關文件刪除,再修改cmake指令後重新生成:

# 查找該機器可使用的編譯線程數
nproc
# 假如輸出是8, 執行8線程編譯
make -j8
sudo make install
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

  

編譯opencv靜態庫(a)

  參考鏈接:Ubuntu16.04下編譯OpenCV2.4.13靜態庫(.a文件)
  有的項目需要使用opencv的.a靜態庫,動態庫能生成部分.a文件,但是不完整,因此找了下生成靜態庫的方法。
  與創建動態庫相同,在opencv文件夾中創建生成文件的文件夾,如static_release,並在該文件夾中打開終端,執行cmake命令:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D BUILD_SHARED_LIBS=NO \
      -D BUILD_PNG=ON \
      -D BUILD_JASPER=ON \
      -D BUILD_JPEG=ON \
      -D BUILD_TIFF=ON \
      -D BUILD_ZLIB=ON \
      -D WITH_JPEG=ON \
      -D WITH_PNG=ON \
      -D WITH_JASPER=ON \
      -D WITH_TIFF=ON ..

  可以仿照動態庫的cmake命令,主要是添加BUILD_SHARED_LIBS=NO,代表不編譯動態庫而是編譯靜態庫,編譯結束後就可以在/usr/local/lib/看到生成的一系列.a文件。

  

測試

  安裝完成後可以通過pkg-config opencv --modversion查看opencv是否安裝成功及版本號。
  測試代碼可以仿照Ubuntu 18.04源碼編譯安裝OpenCV 4.0流程開啓攝像頭/視頻,或者像ubuntu 16.04 OpenCV3.2.0完全編譯安裝打開一張圖片。
  首先創建DisplayImage.cpp文件,輸入:

#include <cv.h>
#include <highgui.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
 
using namespace cv;
int main( int argc, char** argv )
{
    Mat image;
    image = imread( argv[1], 1 );
 
    if( argc != 2 || !image.data )
    {
        printf( "No image data \n" );
        return -1;
    }
 
    namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
    imshow( "Display Image", image );
    waitKey(0);
 
    return 0;
}

  創建CMakeLists.txt 文件,輸入:

project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

  在該文件夾下打開終端,執行:

cmake .
make

  即可生成一個DisplayImage的執行文件,執行./DisplayImage test.jpg即可打開圖片, test.jpg爲該文件夾下放置的一張圖像,也可以指定到其它路徑中的圖像。
  

卸載

cd /usr
sudo find . -name "*opencv*" | xargs sudo rm -rf

  

  

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章