ubuntu:安裝及使用OpenCV4.1.0(C++/python)

       Ubuntu下安裝opencv真心不容易,原因在於很多人在ubuntu下一般都安裝了anaconda!下面是總結的安裝opencv並運行一個小程序的示例過程!如有錯誤,請讀者指出!

一、下載opencv

網址:https://github.com/opencv

可以進入github下載,也可使用如下命令下載:

git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git

下載後,將opencv_contrib文件夾移動到opencv中去。

二、添加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

裏面有些東西諸如cmake、git、python-dec、python-numpy一般早都安裝好了,確定的話可以直接去掉。

三、編譯opencv

1.opencv目錄下,創建build文件夾

mkdir build

2.進入build目錄,執行cmake命令:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=1 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE=True ..

需要支持GPU加速:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=1 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE=True -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D WITH_CUDA=ON -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D WITH_OPENMP=ON -D WITH_CUFFT=ON -D WITH_CUBLAS=ON ..

注意:上面的cmake命令必須按照我的執行。

3.使用make開始編譯

make -j8

-j8是同時使用8核CPU來執行編譯過程,這樣速度比較快,具體需要根據自己的電腦情況修改。

4.編譯install

sudo make install

然後在/usr/local/lib下可以看到編譯的結果。

5.卸載opencv

sudo make uninstall

6.手動卸載opencv

sudo rm -r /usr/local/include/opencv4 
sudo rm -r /usr/local/include/opencv 
sudo rm -r /usr/include/opencv 
sudo rm -r /usr/include/opencv4 
sudo rm -r /usr/local/share/opencv 
sudo rm -r /usr/local/share/OpenCV 
sudo rm -r /usr/share/opencv 
sudo rm -r /usr/share/OpenCV 
sudo rm -r /usr/local/bin/opencv* 
sudo rm -r /usr/local/lib/libopencv*
sudo rm -r /usr/local/lib/pkgconfig/opencv4.pc
sudo rm -r /usr/local/lib/cmake/opencv4

四、配置環境

1.配置pkg-config路經

經過上面的步驟後,在/usr/local/lib/pkgconfig下生成了opencv4.pc文件,這個文件很重要,裏面記錄了OpenCV頭文件、庫文件的路經。需要進行如下配置:

#進入 bash.bashrc
sudo gedit /etc/bash.bashrc

#在文件最後添加如下內容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

#更新
sudo updatedb

2.配置庫路經

#打開下列文件
sudo gedit /etc/ld.so.conf.d/opencv.conf 

# 添加lib路經
/usr/local/lib

# 更新
sudo ldconfig

NOTE:一切有關” cannot open shared object file: No such file or directory “的問題基本都可以通過上面的方式來解決(除非是操作系統裏確實沒有包含該共享庫(lib*.so.*文件)或者共享庫版本不對)

查看opencv版本號:

pkg-config --modversion opencv4

 

五、程序測試

1.編寫一個test.cpp文件,內容如下:

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(void)
{
  Mat img = imread("/home/dulingwen/Pictures/ai.jpg",0);
  imwrite("/home/dulingwen/Pictures/aj.jpg",img);
  return 0;
}

2.構建CMakeLists.txt文件

這個步驟,最簡單的方式是去opencv的文件夾裏直接複製一份過來,位置:/opencv/samples/cpp/example_cmake下,在裏面修改部分內容如下所示:

# 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(opencv_test_project)

# 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(opencv_test_project test.cpp)

# Link your application with OpenCV libraries
target_link_libraries(opencv_test_project LINK_PRIVATE ${OpenCV_LIBS})

cmake的知識可以參考:cmake的一些基礎知識

3.編譯並運行

進入test.cpp所在目錄,輸入如下命令

cmake ./
make 

也可以創建一個build文件夾,在這個文件夾裏執行編譯過程,這樣生成的一些中間文件會都保存在build文件夾中而不會與源文件混在一起,此時cmake命令如下:

cmake ..  //兩個點表示從上一級文件夾中尋找CMakeLists.txt並執行
make

最後會生成一個名爲opencv_test_project的可執行程序,輸入如下命令即可執行它:

./opencv_test_project

根據程序,目錄/home/dulingwen/Pictures下會生成一個單通道的圖像,名爲aj.jpg,如果你能看到說明程序運行成功了!

4.使用命令行編譯:

這個我還不會,後面學會了再來完善!

六、安裝opencv-python

1.使用如下命令

pip install opencv-python

2.安裝opencv-contrib-python

opencv-pyhon中只是包含了opencv的主要模塊,很多比較新的高級的算法、某些不免費的算法如sift、surf特徵點算法沒有包含進去,如果你想使用這些功能,需要卸載opencv-python,然後安裝opencv-contrib-python。

pip install opencv-contrib-python

將自動安裝最新版本。

3.如何使用不免費的模塊?

        non-free算法目前僅在opencv-contrib-python3.4.2.17及以下的版本中可以使用。當然opencv本身並不收費,只不過如果你是在商業項目中使用non-free算法,那就需要交費了,因爲算法的發明者申請並持有了該算法的專利。對於學生而言,平常的學習中一般還是會用到的:

pip install opencv-contrib-python==3.4.2.17

七、編譯過程中可能遇到的問題

問題1.如果遇到如下類似的問題,這個可能是權限導致的。

../../lib/libopencv_imgcodecs.so.4.1.1: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
../../lib/libopencv_imgcodecs.so.4.1.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
../../lib/libopencv_imgcodecs.so.4.1.1: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
../../lib/libopencv_imgcodecs.so.4.1.1: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'

......

建議修改命令爲:

sudo make -j8

但是也有可能是libtiff的庫與opencv所要調用的版本不同,建議重新安裝:

sudo apt-get uninstall libtiff5
sudo apt-get install libtiff5

問題2.IPPICV文件下載失敗。

IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz
CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
  IPPICV: Download failed: 28;"Timeout was reached"

這個由於有牆,只好手動下載了,路經隱含在3rdparty/ippicv/ippicv.cmake中:

在第5行有:set(IPPICV_COMMIT "32e315a5b106a7b89dbed51c28f8120a48b368b4")

第47行有: "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"

兩者個結合加上文件名就是文件的下載路經了:

https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz

下載好後在該文件中替換掉原來的路經即可

"/data/下載/opencv"
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"

問題3.face_landmark_model.dat下載失敗

解決方法同上,這個文件的路經隱含在/opencv_contrib/modules/face/CMakeLists.txt中

下載路經爲:

https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat

然後在該文件中替換掉原來的路經即可:

 "/data/下載/opencv/"
 #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"

當然隨着opencv版本更新,路經有可能會發生變化,但目前就是這個路經了

參考資料:

1.Accelerating OpenCV 4 – build with CUDA 10.0, Intel MKL + TBB and python bindings in Windows

2.Setting up Ubuntu 16.04 + CUDA + GPU for deep learning with Python

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