日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

cmake 编译curl源码_OpenCV4.0 源码编译

發(fā)布時(shí)間:2025/3/15 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmake 编译curl源码_OpenCV4.0 源码编译 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前寫過幾篇關(guān)于OpenCV的博客,都是基于openCV 3.14寫的,10月份OpenCV發(fā)布了4.0的bate版本,我就切換到4.0版本上來。之后的博客都會是基于4.0版本的。本文主要介紹一下三個(gè)方面的內(nèi)容:

  • OpenCV 4.0的改進(jìn)

  • 編譯OpenCV 4.0源碼的方法

  • 源碼編譯中遇到的問題及解決方法

這三方面的問題都是比較基礎(chǔ)的,但是對于新手可能有些復(fù)雜。本文是在Ubuntu 18.04系統(tǒng)上進(jìn)行編譯,如果熟悉cmake可能會更好。

OpenCV 4.0的更新

4.0版本的改進(jìn)主要集中在深度學(xué)習(xí)和高性能計(jì)算方面,一下包含4.0 alpha版本以來的改進(jìn):

  • 深度學(xué)習(xí)方面:

    • 將ONNX解析器添加到OpenCV DNN模塊中,它能夠支持AlexNet、Incepiton v2、Reset、VGG等分類網(wǎng)絡(luò)。同時(shí)改進(jìn)其導(dǎo)入器,能夠支持更多拓?fù)?/p>

    • 屏蔽RCNN支持和示例

    • 修復(fù)了OpenCL后端的幾個(gè)穩(wěn)定性問題

    • 添加了Intel的開源工具OpenVINO,該工具包可以實(shí)現(xiàn)高性能計(jì)算機(jī)視覺和深度學(xué)習(xí)推理,并可跨多種類型的英特爾平臺輕松實(shí)現(xiàn)異構(gòu)執(zhí)行。

  • 高性能計(jì)算方面:

    • 使用AVX2對60個(gè)kernels進(jìn)行了加速優(yōu)化,涉及18個(gè)功能

    • 針對iGPU加速了Kinect Fusion算法,在高高分辨率(512×521×512)上可達(dá)到并行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

這些庫都很好安裝,如果安裝過程遇到什么問題,可以直接把報(bào)錯(cuò)信息粘貼出來百度或者Google,很容易找到解決辦法,畢竟已經(jīng)有很多前輩踩過這些問題了。另外就是對于新手用好下面兩個(gè)命令:

sudo apt-get update
sudo apt-get upgrade

安裝庫的過程中,很多問題更新以后就可以解決。


做好前戲之后,就要直奔主題了。
OpenCV編譯非常方便,畢竟cmake已經(jīng)寫的很好了。編譯命令很容易在網(wǎng)上找到,這里就再貼一下:

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

簡單解釋一下:

  • OpenCV是不讓在源文件目錄下編譯的,所以在編譯之前可以在opencv目錄下創(chuàng)建build或者release等目錄,然后進(jìn)入該目錄執(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()

    可以看到,是不允許進(jìn)行內(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/目錄下的。
    另外還有很多選項(xiàng),可以在CMake文件中去編輯也可以使用編譯選項(xiàng)-D去指定,用戶可以根據(jù)需求修改。


以上僅僅是使用cmake生成了makefile,接下來是編譯安裝的命令:

make -j8
make install

make -j8是編譯,j8只是根據(jù)處理器不同編譯速度不同,例如4核8線程的機(jī)器-j8速度是最快的。


到此為止就完成了OpenCV 4.0的源碼編譯安裝。
最后一步是設(shè)置環(huán)境變量,命令如下:

vi ~/.bashrc

在文件最后增加下面兩行代碼:注意這里的路徑是我的安裝路徑,需要修改為你自己前文執(zhí)行cmake的時(shí)候配置的安裝路徑

export PKG_CONFIG_PATH=~/study/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=~/study/usr/local/lib

測試一下:
在準(zhǔn)備工作中我們安裝過一個(gè)工具叫做pkg-config, 運(yùn)行如下命令:

pkg-config --helpUsage: ? ? ? ? ? ? ?
?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)建一個(gè)窗口
? ? ? ? ?namedWindow("Opencv Image", WINDOW_AUTOSIZE);
? ? ? ? ?// 顯示圖像
? ? ? ? ?imshow("Opencv Image", myMat);
? ? ? ? ?// 等待按鍵延時(shí) ms
? ? ? ? ?waitKey(5000);
? ? ?return 0;
?}

編譯命令:

g++ test.cpp `pkg-config --libs --cflags opencv4`

注意使用的是反引號,關(guān)于pkg-config命令的含義可以使用--help查看;主要是輸出鏈接OpenCV的庫,這里只是為了方便,正確使用的時(shí)候,可以自己寫cmake去設(shè)置。

編譯完以后直接執(zhí)行a.out文件就可以看到效果了。需要字節(jié)下載一張.jpeg的圖片放到test.cpp所在的目錄。

總結(jié)

以上是生活随笔為你收集整理的cmake 编译curl源码_OpenCV4.0 源码编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。