TX2使用cmake編譯opencv庫

目錄

1. 安裝相關庫

2. 下載源碼並解壓:

3. 配置

4.編譯

5.生成庫文件

編譯CUDA版opencv


在Linux下編譯自己的opencv庫,個人覺得用cmake編譯最好了,其主要是opencv源碼路徑下提供了CMakeLists.txt文件用於編譯,而且使用cmake編譯很方便。

這是opencv在linux下的編譯官方tutorial:https://docs.opencv.org/3.4.0/d7/d9f/tutorial_linux_install.html,本文很多地方都是直接進行翻譯的。

1. 安裝相關庫

在正式編譯之前,先打開終端輸入下面幾個命令,安裝幾個與opencv有關的庫,注:安裝需在連網情況下進行。

[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

2. 下載源碼並解壓:

tar zxvf 文件名.tar

3. 配置

cd ~/opencv-3.4.3  # 進入opencv文件夾
mkdir build # 創建build文件夾
cd build # 進入build文件夾

# CMAKE_BUILD_TYPE=Release表示編譯的版本,CMAKE_INSTALL_PREFIX:表示生成的include和lib文件#夾路徑,注意,後面的兩個點千萬不能省,代表了上級目錄,這一步是cmake的配置過程
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..  

 CMAKE_BUILD_TYPE爲版本,設置爲release版本,CMAKE_INSTALL_PREFIX爲生成的庫文件路徑,/usr/local是系統默認路徑,許多第三方庫都安裝在這個目錄下面,.so文件都安裝在/usr/local/lib目錄下面,最好不要換其他路徑,否則很容易導致找不到.so庫的問題。如果上面的配置命令無效,則嘗試將空格去掉試試,使用以下命令:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local .. 

4.編譯

編譯,網上很多教程都是多線程編譯的,我這裏不是很推薦,我嘗試過多線程編譯很容易出問題,最好還是使用單線程,這一步比較耗時,耐心等待編譯完成。

make -j1

5.生成庫文件

 安裝庫文件,即生成.so

sudo make install

sudo make install 這一步生成所需要的頭文件和.so文件,根據上面的設置,頭文件在“usr/local/include”中,.so文件夾在“usr/local/lib”文件夾中,還有一些可執行文件在“usr/local/bin”文件夾中,生成的文件目錄如下圖所示:

使用cmake-gui編譯設置:

  • set full path to OpenCV source code, e.g. /home/user/opencv:源碼路徑
  • set full path to <cmake_build_dir>, e.g. /home/user/opencv/build:編譯生成文件的路徑
  • set optional parameters
  • run: “Configure”
  • run: “Generate”

編譯CUDA版opencv

編譯CUDA版本的opencv只在第三步配置階段有所不同,其他過程都一樣,CUDA版本的配置命令如下:

cmake -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DWITH_CUDA=ON \
    -DENABLE_FAST_MATH=1 \
    -DCUDA_FAST_MATH=1 \
    -DWITH_CUBLAS=1 \
    -DINSTALL_PYTHON_EXAMPLES=ON \
    -DBUILD_EXAMPLES=ON \
    -DCUDA_GENERATION=Maxwell ..   //Tx1爲maxwell架構,tx2爲pascal架構

這裏-DWITH_CUDA=ON 表示開啓cuda的相關功能,-DCUDA_GENERATION=Maxwell中的Maxwell代表的是機器上顯卡的架構。

在opencv3.4.7版本的OpenCVDetectCUDA.cmake文件中,顯示了多種顯卡架構類型:

set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Fermi")
    set(__cuda_arch_bin "2.0")
  elseif(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
  elseif(CUDA_GENERATION STREQUAL "Maxwell")
    set(__cuda_arch_bin "5.0 5.2")
  elseif(CUDA_GENERATION STREQUAL "Pascal")
    set(__cuda_arch_bin "6.0 6.1")
  elseif(CUDA_GENERATION STREQUAL "Volta")
    set(__cuda_arch_bin "7.0")
  elseif(CUDA_GENERATION STREQUAL "Turing")
    set(__cuda_arch_bin "7.5")
  elseif(CUDA_GENERATION STREQUAL "Auto")

歷代顯卡架構:Tesla時代——》Fermi時代——》Kepler時代——》Maxwell時代

參考:

https://blog.csdn.net/ksws0292756/article/details/79511170

發佈了65 篇原創文章 · 獲贊 34 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章