cmake 编译curl源码_OpenCV4.0 源码编译
之前寫過幾篇關(guān)于OpenCV的博客,都是基于openCV 3.14寫的,10月份OpenCV發(fā)布了4.0的bate版本,我就切換到4.0版本上來。之后的博客都會是基于4.0版本的。本文主要介紹一下三個方面的內(nèi)容:
OpenCV 4.0的改進
編譯OpenCV 4.0源碼的方法
源碼編譯中遇到的問題及解決方法
這三方面的問題都是比較基礎(chǔ)的,但是對于新手可能有些復(fù)雜。本文是在Ubuntu 18.04系統(tǒng)上進行編譯,如果熟悉cmake可能會更好。
OpenCV 4.0的更新
4.0版本的改進主要集中在深度學(xué)習(xí)和高性能計算方面,一下包含4.0 alpha版本以來的改進:
深度學(xué)習(xí)方面:
將ONNX解析器添加到OpenCV DNN模塊中,它能夠支持AlexNet、Incepiton v2、Reset、VGG等分類網(wǎng)絡(luò)。同時改進其導(dǎo)入器,能夠支持更多拓?fù)?/p>
屏蔽RCNN支持和示例
修復(fù)了OpenCL后端的幾個穩(wěn)定性問題
添加了Intel的開源工具OpenVINO,該工具包可以實現(xiàn)高性能計算機視覺和深度學(xué)習(xí)推理,并可跨多種類型的英特爾平臺輕松實現(xiàn)異構(gòu)執(zhí)行。
高性能計算方面:
使用AVX2對60個kernels進行了加速優(yōu)化,涉及18個功能
針對iGPU加速了Kinect Fusion算法,在高高分辨率(512×521×512)上可達到并行CPU版本的3倍。
使用C++ 11庫,需要符合C++ 11標(biāo)準(zhǔn)的編譯器,默認(rèn)情況下可以使用一些更好的功能,例如parallel_for和lambda函數(shù),方便迭代cv::Mat,通過列出他的元素初始化cv::Mat等。另外,parallel_for可以使用std::threads池作為后端。
使用標(biāo)準(zhǔn)的std::string和std::shared_ptr代替cv::String和cv::ptr。
添加了FP16支持(CV_16F)
該版本中OpenCV 1.x的C API部分的被排除,在接下來的4.0 gold版本中將完成清理.
OpenCV 4.0 源碼編譯
OpenCV本身依賴很多庫,所以首先要搭建編譯環(huán)境。注意編譯器需要支持c++ 11,例如g++。
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev這其中包含了cmake和git,如果安裝過就不需要重新安裝了。
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev這些庫都很好安裝,如果安裝過程遇到什么問題,可以直接把報錯信息粘貼出來百度或者Google,很容易找到解決辦法,畢竟已經(jīng)有很多前輩踩過這些問題了。另外就是對于新手用好下面兩個命令:
sudo apt-get updatesudo apt-get upgrade
安裝庫的過程中,很多問題更新以后就可以解決。
做好前戲之后,就要直奔主題了。
OpenCV編譯非常方便,畢竟cmake已經(jīng)寫的很好了。編譯命令很容易在網(wǎng)上找到,這里就再貼一下:
簡單解釋一下:
OpenCV是不讓在源文件目錄下編譯的,所以在編譯之前可以在opencv目錄下創(chuàng)建build或者release等目錄,然后進入該目錄執(zhí)行以上代碼。../表示上一級目錄,這里需要是CMakeLists.txt所在的目錄。
選擇程序構(gòu)建的類型,release版本 or debug版本
編譯后安裝的目錄,注意這里可以自己指定安裝的目錄,默認(rèn)情況下會安裝到/usr/local目錄下。
簡單看一下cmake文件,
第一段:
9 ?# Disable in-source builds to prevent source tree corruption.
10 if(" ${CMAKE_SOURCE_DIR}" STREQUAL " ${CMAKE_BINARY_DIR}")
11 ? message(FATAL_ERROR "
12 FATAL: In-source builds are not allowed.
13 ? ? ? ?You should create a separate directory for build files.
14 ")
15 endif()可以看到,是不允許進行內(nèi)部編譯。
第二段:
38 ?if(NOT DEFINED CMAKE_INSTALL_PREFIX) #如果沒有指定安裝目錄
39 ? if(NOT CMAKE_TOOLCHAIN_FILE) #并且沒有指定架構(gòu)
40 ? ? # it _must_ go before project(OpenCV) in order to work
41 ? ? if(WIN32)
42 ? ? ? set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
43 ? ? else()
44 ? ? ? set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
45 ? ? endif()
46 ? else()
47 ? ? #Android: set output folder to ${CMAKE_BINARY_DIR}
48 ? ? set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
49 ? ? # any cross-compiling
50 ? ? set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
51 ? endif()
52 endif()這是關(guān)于安裝目錄的代碼,可以看出,默認(rèn)情況下在Linux系統(tǒng)中是安裝在/usr/local/目錄下的。
另外還有很多選項,可以在CMake文件中去編輯也可以使用編譯選項-D去指定,用戶可以根據(jù)需求修改。
以上僅僅是使用cmake生成了makefile,接下來是編譯安裝的命令:
make -j8make install
make -j8是編譯,j8只是根據(jù)處理器不同編譯速度不同,例如4核8線程的機器-j8速度是最快的。
到此為止就完成了OpenCV 4.0的源碼編譯安裝。
最后一步是設(shè)置環(huán)境變量,命令如下:
在文件最后增加下面兩行代碼:注意這里的路徑是我的安裝路徑,需要修改為你自己前文執(zhí)行cmake的時候配置的安裝路徑
export PKG_CONFIG_PATH=~/study/usr/local/lib/pkgconfigexport LD_LIBRARY_PATH=~/study/usr/local/lib
測試一下:
在準(zhǔn)備工作中我們安裝過一個工具叫做pkg-config, 運行如下命令:
?pkg-config [OPTION?] ? ? ? ? ? ? ? ? ?
Help Options:
?-h, --help ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Show help options ? ? ? ? ? ? ? ? ?
Application Options: ? ? ? ? ? ? ?
?--version ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? output version of pkg-config ? ? ? ? ? ?
?--modversion ? ? ? ? ? ? ? ? ? ? ? ? ? ?output version for package ? ? ? ? ? ? ? ?
?--atleast-pkgconfig-version=VERSION ? ? require given version of pkg-config ? ? ? ? ? ? ? ?
?--libs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?output all linker flags ? ? ? ? ? ? ? ? ?
?--static ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?output linker flags for static linking ? ? ? ? ? ? ? ?
?--short-errors ? ? ? ? ? ? ? ? ? ? ? ? ?print short errors ? ? ? ? ? ? ? ?
?--libs-only-l ? ? ? ? ? ? ? ? ? ? ? ? ? output -l flags ? ? ? ? ? ? ?
?--libs-only-other ? ? ? ? ? ? ? ? ? ? ? output other libs (e.g. -pthread) ? ? ? ? ? ? ? ?
?--libs-only-L ? ? ? ? ? ? ? ? ? ? ? ? ? output -L flags ? ? ? ? ?
?... ? ?
僅僅截取了一部分,能夠看到使用--modversion命令可以查看opencv的版本號。
執(zhí)行如下代碼:
pkg-config --modversion opencv4顯示如下:
4.0.0測試代碼
直接上代碼:
#include "opencv2/core.hpp"? #include "opencv2/imgproc.hpp"
? #include "opencv2/highgui.hpp"
? #include
? using namespace cv;
? using namespace std;
?int main()
?{
? ? ?cout << "Hello OpenCV " << CV_VERSION << endl;
? ? ? ? ?// 載入圖像
? ? ? ? ?Mat myMat = imread("timg.jpeg", 1);
? ? ? ? ?// 創(chuàng)建一個窗口
? ? ? ? ?namedWindow("Opencv Image", WINDOW_AUTOSIZE);
? ? ? ? ?// 顯示圖像
? ? ? ? ?imshow("Opencv Image", myMat);
? ? ? ? ?// 等待按鍵延時 ms
? ? ? ? ?waitKey(5000);
? ? ?return 0;
?}
編譯命令:
g++ test.cpp `pkg-config --libs --cflags opencv4`注意使用的是反引號,關(guān)于pkg-config命令的含義可以使用--help查看;主要是輸出鏈接OpenCV的庫,這里只是為了方便,正確使用的時候,可以自己寫cmake去設(shè)置。
編譯完以后直接執(zhí)行a.out文件就可以看到效果了。需要字節(jié)下載一張.jpeg的圖片放到test.cpp所在的目錄。
總結(jié)
以上是生活随笔為你收集整理的cmake 编译curl源码_OpenCV4.0 源码编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python与人工智能的关系_pytho
- 下一篇: java web 图书管理系统_图书管理