前言
參考
https://zhuanlan.zhihu.com/p/87197806
下面是筆記---如果要看原版的話就點擊上面的鏈接。
由於最新版的OpenCV 4.1需要CMake 3.5.1版本,因此需要保證電腦中安裝的CMake編譯器版本高於3.5.1。可以通過代碼清單1-2中的命令安裝最新版CMake。
代碼清單1-2 安裝最新版CMake命令 1. sudo apt-get update 2. sudo apt-get upgrade 3. sudo apt-get install build-essential cmake
其中安裝“update”和“upgrade”分別是更新軟件源和查看是否有軟件需要更新,這兩個命令一般用於安裝系統後初次下載軟件,或者更換源之後執行,可以根據實際情況不輸入該命令。安裝的“build-essential”是Linux系統中常用的一些編譯工具,“cmake”會直接安裝最新版CMake編譯器。
OpenCV 4.0的使用會需要很多的依賴項,例如圖片編碼庫、視頻編碼庫等。不過這些依賴是針對某些特定的功能,即使某些功能的依賴項沒有安裝,也不會影響OpenCV 4.1的編譯與使用,只是在使用特定功能時會出現問題。因此在不確定某型功能以後會不會用到時,建議將常用的依賴都安裝上,可以通過代碼清單1-3中的命令進行安裝。
代碼清單1-3 安裝OpenCV依賴 1. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev gfortran libgtk2.0-dev libjpeg-dev libpng-dev
如果需要結合Python使用OpenCV 4.1,需要安裝Python開發庫。如果沒有安裝,則無法生成Python的鏈接。Python開發庫有Python 2.7和Python 3.5兩個版本,如果能確定不使用某一版本,可以不用安裝對應版本的開發庫,可以通過代碼清單1-4中的命令進行安裝。
代碼清單1-4 安裝Python依賴 1. sudo apt-get install python2.7-dev python3.5-dev
PS:筆者不需要用到python,故沒安裝這個。
這裏
編譯和安裝OpenCV 4.1
安裝完成所有依賴項之後,就可以進行OpenCV 4.2的編譯與安裝。由於Ubuntu系統中需要通過編譯安裝OpenCV,
我下載的openCv4.2,然後解壓到自己的路徑是:
ls /usr/local/opencv-4.2.0/
代碼清單1-5 在OpenCV 4.0文件夾中創建build文件命令 cd /usr/local/opencv-4.2.0/ sudo mkdir build cd build
接下來開始編譯工作,編譯安裝命令如代碼清單1-6所示。
代碼清單1-6 編譯OpenCV命令 1. sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 2. sudo make -j4 3. sudo make install
命令中“CMAKE_BUILD_TYPE”是編譯的模式參數,“CMAKE_INSTALL_PREFIX”是安裝路徑參數。這些參數都可以缺省,但是如果在安裝多個版本的OpenCV時,設置不同的安裝路徑將變得十分有必要。
第一行命令的最後一定不要忘記有一個“..”指令,其含義是告訴編譯器將要編譯的文件是來自上一層文件夾中的CMakeList.txt文件。
第二行命令是完成最終的編譯,“-j4”的意思是啓用4個線程同時進行編譯,可以根據自己計算機的性能自主選擇,例如,啓用8個線程“-j8”,只用單線程可以缺省。
之後根據計算機性能不同,將會是一個漫長的等待編譯完成的過程。在編譯完成後,用代碼清單1-6中第3行代碼安裝OpenCV 4.2。
環境配置
安裝OpenCV 4.1之後還需要通過配置環境告訴系統安裝的OpenCV 4.1在哪裏,按照如下步驟操作即可完成環境配置,所有的命令在代碼清單1-7中給出。
首先執行代碼清單1-7中第1行命令,可能會打開一個空白的文件,但是無論是否爲空白文件,都需要在末尾添加路徑“/usr/local/lib”。
這裏添加內容與我們編譯時設置的路徑有關,如果安裝路徑變化,這裏添加的內容也要隨之改變。
保存文件並退出後,使用代碼清單1-7中第2行命令將配置路徑生效。接下來需要配置bash,在終端通過代碼清單1-7中第3行命令打開bash.bashrc文件,在打開的文件末尾加上OpenCV 4.1的安裝路徑,代碼如代碼清單1-7中第4行和第5行所示。
這裏需要重點說明的是,文件路徑需要與設置的安裝路徑相對應。
保存輸入內容後,通過代碼清單1-7中第6行和第7行命令更新系統的配置環境,最終完成了OpenCV 4.1的安裝。
代碼清單1-7 Ubuntu系統中配置OpenCV 4.0環境 1. sudo gedit /etc/ld.so.conf.d/opencv.conf 2. sudo ldconfig 3. sudo gedit /etc/bash.bashrc 4. PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 5. export PKG_CONFIG_PATH 6. source /etc/bash.bashrc 7. sudo updatedb
步驟說明如下:
第一步:編輯opencv.conf的內容如下:
然後保存。
繼續第二步。
sudo ldconfig
然後編輯:
sudo gedit /etc/bash.bashrc
在最後面添加內容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
如下圖:
保存一下然後,調用:
source /etc/bash.bashrc
使配置生效,最後:
sudo updatedb
驗證OpenCV 4.1是否安裝成功
ps:參考原作者的實例,這裏結合qt creator直接寫代碼驗證。。
第一步:
CMakeLists.txt裏面導入OpenCV庫[demo如下]:
cmake_minimum_required(VERSION 3.5) SET(SOURCE_FILES main.cpp StudentInfo.cpp base001.cpp ) project(cpp_study_003 LANGUAGES CXX) ## 引入OpenCV end set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) ## 引入OpenCV begin find_package(OpenCV REQUIRED) # 尋找opencv的安裝路徑 message(STATUS "OpenCV 類庫狀態") message(STATUS " 版本號: ${OpenCV_VERSION}") message(STATUS " 庫: ${OpenCV_LIBS}") message(STATUS " 路徑: ${OpenCV_INCLUDE_DIRS}") # Add OpenCV headers location to your include paths include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(cpp_study_003 ${SOURCE_FILES}) # Link your application with OpenCV libraries ##注意 cpp_study_003是我的項目名稱,你需要改成自己的項目名稱 ## 還有,target_link_libraries要用在add_executable後面 target_link_libraries(cpp_study_003 ${OpenCV_LIBS})
ps:
set(CMAKE_CXX_STANDARD 14)
這段的意思是,cmake用的c++14來進行編譯。
然後build以後,在qt creator你會發現---嗯?多了一些東西:
然後,在main.cpp上面弄個測試例子,我懶直接抄的opencv自帶的例子---在samples文件夾的cpp目錄下面,代碼如下:
// This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html #include <opencv2/core/utility.hpp> #include <iostream> static const std::string keys = "{ b build | | print complete build info }" "{ h help | | print this help }"; int main(int argc, const char* argv[]) { cv::CommandLineParser parser(argc, argv, keys); parser.about("This sample outputs OpenCV version and build configuration."); if (parser.has("help")) { parser.printMessage(); } else if (!parser.check()) { parser.printErrors(); } else if (parser.has("build")) { std::cout << cv::getBuildInformation() << std::endl; } else { std::cout << "Welcome to OpenCV " << CV_VERSION << std::endl; } return 0; }
執行以後得到結果:
很贊哦! (1024)