編譯opencv作用
1. opencv 交叉編譯是什麼意思
首先你已經安裝了交叉編譯工具鏈,比如說自己安裝了gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux工具
然後cmake用的是cmake-3.4.1-Linux-i386.tar.gz版本,其實這個只需在linux中解壓即可,需要用cmake-gui時,只需到bin目錄下,sudo ./cmake-gui即可
打開cmake-gui之後,選擇要編譯的源文件和編譯之後存放的路徑
2. Opencv 編譯好的和用Cmake生成的有什麼不同呢 Cmake是什麼用的 通俗些最好了,謝謝!
Cmake是一個make工具,它可以根據makefile文件來調用你和編譯器進行多個文件的編譯和鏈接。用Cmake生成的就是使用你本地的編譯器來編譯生成那些文件。
3. opencv是干什麼的
OpenCV是一款由Intel公司俄羅斯團隊發起並參與和維護的一個計算機視覺處理開源軟體庫,支持與計算機視覺和機器學習相關的眾多演算法,並且正在日益擴展。
OpenCV基於C++實現,同時提供python, Ruby, Matlab等語言的介面。OpenCV-Python是OpenCV的Python API,結合了OpenCV C++ API和Python語言的最佳特性。
作用:
OpenCV是一個基於BSD許可發行的跨平台計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。OpenCV在計算機視覺的發展中發揮了重要的作用,使成千上萬的人能夠在視覺上做更多的工作。OpenCV允許學生,研究人員,專業人員和創業者高效地實施項目,並通過向他們提供可在多種平台上優化的計算機視覺架構。
4. ubuntu+cmake+opencv 靜態庫編譯和使用
https://opencv.org/releases/page/2/
能看到其中一個很明顯的改變就是「BUILD_SHARED_LIBS=NO」這個選項,代表了不編譯動態庫,而是編譯靜態庫。後面那些則是增加一些opencv所依賴的第三方庫,也要把他們一起生成才行。
參考連接: https://blog.csdn.net/woainishifu/article/details/79712110
缺少:libwebp.a
缺少:libIlmImf.a
缺少:liblibjasper.a
缺少:libittnotify.a
先完整編譯opencv 環境
https://www.jianshu.com/p/f73fcb9a0b1a
再使用 locate 查找 .a靜態文件
5. OpenCV靜態庫編譯與鏈接
以OpenCV-4.0.0為例說明在Ubuntu環境下的靜態庫編譯與鏈接方法:
opencv依賴第三方的庫,所以當把opencv編譯成靜態庫的時候,注意要把它運行時必要的依賴庫也編譯進來,opencv源碼內有自己的3rdparty,主要有:libjpeg、libpng、libtiff、libzlib、libwebp、libprotobuf、ffmpeg(用到video時編譯)、libgtk(用於顯示界面顯示,伺服器部署不會用到),可以通過cmake -LA來查看配置的編譯信息,再根據信息考慮把opencv的哪些mole編譯進來。
鏈接時指定opencv的靜態庫以及依賴的庫。另外需要注意頭文件的問題,通過CMakeLists把opencv加入項目編譯時,由於opencv編譯完成後要install才會把所用的頭文件集中拷貝到一個地方,所以事先將頭文件拷貝到了項目的opencv目錄下。
6. 如何用cmake 編譯OpenCV 3.1.0的opencv
用cmake 編譯OpenCV 3.1.0的opencv:
建一個新的文件夾,完整路徑:D:CMakeCMake-StudyHelloCMake,
然後在HelloCMake文件夾里建立一個HelloCMake.cpp文件,裡面的代碼如下:
#include <iostream>
int main()
{
std::cout<<"Study CMake Together - Hello CMake!"<<std::endl;
return 0;
}
然後在HelloCMake文件夾里建立一個CMakeLists.txt文件,注意文件名不能是別的,必須叫這個名字。裡面的內容如下:
cmake_minimum_required(VERSION 2.6)
project(HelloCmake)
add_executable(HelloCMake hellocmake.cpp)
接著在HelloCMake的同級目錄里建立一個新的文件夾,就叫做HelloCMake-bin,在我機子上的完整路徑是:D:CMakeCMake-StudyHelloCMake-bin,你可以針對自己的目錄路徑對號入座。
然後打開CMake程序,接著把包含CMakeLists.txt和HelloCMake.cpp文件的完整路徑給」where is the source code」,把最後建立的HelloCMake-bin目錄的完整路徑給」where to build the binaries」,然後按Cofigure,
Configure完了以後,再按Generate,直到所有的紅色選項都變成灰色為止。然後打開HelloCMake-bin,你會發現原來空的文件夾裡面自動生成了好多文件。
到此為止,工程構建完成,打開HelloCMake-bin目錄下的HelloCMake.sln,裡面有三個工程,分別是:ALL_BUILD;HelloCMake;ZERO_CHECK。這三個工程的大概作用如下(個人理解而已),HelloCMake就不用說了,自己要建立的那個工程;ALL_BUILD是管理整個項目的工程;ZERO_CHECK是實時監視CMakeLists.txt文件變化的工程,一旦CMakeLists.txt里的內容發生了任何變化,ZERO_CHECK就會告訴編譯器要重新構建整個工程環境。所以,你可以先把工程關掉,打開CMakeLists.txt文件,更改裡面的內容以後,把根據以上說的步驟走一遍CMake;你也可以在編譯器環境(如VS2008)中更改CMakeLists.txt文件,然後直接F7編譯工程。如果你選擇後者,你會發現所示的現象發生。
因為你改變了CMakeLists.txt的內容,工程的環境要重新構建、設置。所以你必須載入新的工程環境設置。點Yes,然後點Reload。重新載入設置過的工程環境。
另外一個經常看某些童鞋問的,就是當彈出所示的界面時要怎麼辦?能怎麼辦?界面上提示已經灰常清楚了,指定exe的路徑給它,然後點OK就可以了;出現這種情況的原因是你把沒有生成exe可執行文件的工程設為啟動工程了,你會發現ALL_BUILD這個工程名字是黑體顯示的,表示它是啟動工程;或者你把生成exe可執行文件的工程,如這里的HelloCMake右擊->設置為啟動工程,也不會出現所示的界面。
好,這些比較瑣碎的東西介紹完,我們一起來看看CMakeLists.txt裡面的代碼表示什麼意思,爭取每句代碼都作解釋,如果有不對的地方,一定要告訴我!
把CMakeLists.txt里的內容再羅列出來:
cmake_minimum_required(VERSION 2.6)
2. project(HelloCmake)
3. add_executable(HelloCMake hellocmake.cpp)
第1行,cmake_minimum_required(VERSION 2.6)這是對CMake版本的要求,基本上每個CMakeLists.txt文件里都會有這句代碼,cmake_minimum_required是cmake里的命令,可大寫小寫。VERSION這個關鍵字必須是大寫,而且不能省略;2.6就是CMake的版本號,現在的版本是2.8.3。
第2行,project(HelloCmake),project也是CMake的命令,裡面的參數HelloCMake是你要生成的工程的名字,換句話說就是生成的***.sln或者***.dsw等工程項目文件的名字。
第3行,add_executable(HelloCMake hellocmake.cpp),add_executable同樣是CMake的命令,鏈接有關的源文件,然後生成exe可執行文件,這是這個命令的作用。第一個參數是生成的exe文件的文件名,一般與project里的工程名一致,這樣編譯生成的文件就分別是HelloCMake.sln和HelloCMake.exe,當然也可以不一樣。Add_executable()後面的是一個參數列表,可帶多個要編譯的文件名,中間以空格或回車等隔開,如可以加入:
add_executable(HelloCMake hellocmake.cpp hellocmake.h)
這樣就把CMake里最常用的三個命令介紹完了,分別是cmake_minimum_required; project; add_executable等