版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、CMake編譯Opencv自帶源碼及程序形成工程并運(yùn)行教程本教程基于聲明:純粹經(jīng)驗(yàn)之談,重點(diǎn)是解決問(wèn)題,若有理解錯(cuò)誤,請(qǐng)多包涵一直很想直接打開(kāi)運(yùn)行opencv自帶的示例程序,或者看看里面一些函數(shù)的源碼,奈何opencv庫(kù)里面給出的都是源文件,直接打開(kāi)不能運(yùn)行,沒(méi)有編譯形成VS中的工程方案,所以要看時(shí),只得自己新建工程,然后復(fù)制過(guò)去,先不說(shuō)麻煩,就算真弄過(guò)去了,還不一定能運(yùn)行,因?yàn)樗€可能有依賴(lài)項(xiàng)什么的問(wèn)題(猜的),總之不一定能夠順利運(yùn)行。后來(lái)聽(tīng)說(shuō)可以用CMake對(duì)其進(jìn)行編譯,可以形成VS中的工程方案,然后直接就可以打開(kāi)運(yùn)行了,這當(dāng)然方便多了,于是就有了下面的東西1 下載及安裝CMake在寫(xiě)本教
2、程的時(shí)候,CMake最新版本為CMake3.4.1,下載網(wǎng)址為:/download/,CMake 有很多的發(fā)行版本,具體有哪些,作為一個(gè)小白,也不懂什么,只是知道其中有分source和binary兩種版本,前面的那個(gè)版本貌似是對(duì)應(yīng)源碼版本,也就是給的是CMake的源碼,如果我們要用它去編譯其他如opencv的源碼,那得先編譯CMake的source文件,然后還要寫(xiě)CMakeList.txt(相當(dāng)于是通過(guò)編程來(lái)實(shí)現(xiàn)編譯其他文件,本人這么理解,若有誤,莫怪),這么復(fù)雜,對(duì)我來(lái)說(shuō),肯定不想要;因此,我選擇了binary版本(直接是二進(jìn)制文件,已經(jīng)編譯好了,并形成了可執(zhí)
3、行程序),下載之后是一個(gè).exe文件,這個(gè)就好辦多了,下載下來(lái),點(diǎn)擊運(yùn)行一頓安裝就可以了開(kāi)始進(jìn)入正題下面摘錄一段關(guān)于CMake的介紹(摘自教程開(kāi)頭的網(wǎng)址):CMake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語(yǔ)句來(lái)描述所有平臺(tái)的安裝(編譯過(guò)程)。他能夠輸出各種各樣的makefile或者project文件,能測(cè)試編譯器所支持的C 特性,類(lèi)似UNIX下的automake。只是 CMake 的組態(tài)檔取名為 CmakeLists.txt。Cmake 并不直接建構(gòu)出最終的軟件,而是產(chǎn)生標(biāo)準(zhǔn)的建構(gòu)檔(如Unix 的 Makefile 或 Windows Visual C 的 projects/works
4、paces),然后再依一般的建構(gòu)方式使用。這使得熟悉某個(gè)集成開(kāi)發(fā)環(huán)境(IDE)的開(kāi)發(fā)者可以用標(biāo)準(zhǔn)的方式建構(gòu)他的軟件,這種可以使用各平臺(tái)的原生建構(gòu)系統(tǒng)的能力是 CMake 和 SCons 等其他類(lèi)似系統(tǒng)的區(qū)別之處。CMake 可以編譯源代碼、制作程式庫(kù)、產(chǎn)生適配器(wrapper)、還可以用任意的順序建構(gòu)執(zhí)行檔。CMake 支援 in-place 建構(gòu)(二進(jìn)檔和源代碼在同一個(gè)目錄樹(shù)中)和 out-of-place 建構(gòu)(二進(jìn)檔在別的目錄里),因此可以很容易從同一個(gè)源代碼目錄樹(shù)中建構(gòu)出多個(gè)二進(jìn)檔。CMake 也支持靜態(tài)與動(dòng)態(tài)程式庫(kù)的建構(gòu)?!癈Make”這個(gè)名字是“Cross Platform Ma
5、ke”的縮寫(xiě)。雖然名字中含有“make”,但是CMake和Unix上常見(jiàn)的“make”系統(tǒng)是分開(kāi)的,而且更為高階。通過(guò)以上介紹我們知道,我們可以用CMake這個(gè)工具將源碼編譯成VS2010的工程文件,使得我們可以在VS下以不同項(xiàng)目組的形式構(gòu)建多個(gè)樣例或者教程工程。我們可以在CMake的官網(wǎng):/cmake/resources/software.html 上找到最新版本的CMake安裝文件。至于為什么選擇的是win32-x86.exe,很多人也許有疑惑,我明明是x64的電腦,怎么選擇這個(gè)呢,其實(shí)我也不太懂,這里只能鼓起勇氣說(shuō)幾句,如果我們稍微留意點(diǎn)的話,會(huì)發(fā)現(xiàn)
6、,我們經(jīng)常建立的.cpp程序都是win32(x86)控制臺(tái)應(yīng)用程序是吧,我一直納悶,為什么是這個(gè)呢?我想可能是編譯器是對(duì)應(yīng)這個(gè)型號(hào)的吧,這玩意好像一直到VS2013都是只有win32(x86)對(duì)應(yīng)的編譯器,但到了VS2015,就不一樣了,即有win32對(duì)應(yīng)的編譯器,還有x64對(duì)應(yīng)的編譯器(也即向前兼容),嗯,我只能說(shuō)這么多了,而且還不知道對(duì)不對(duì),總之,本教程只是經(jīng)驗(yàn)之談,涉及到的理論部分,純粹是為了補(bǔ)補(bǔ)邊,大家覺(jué)得正確就接受,有錯(cuò)誤的話,請(qǐng)?jiān)忂x擇文件“CMake-3.0.1-win32-x86.exe”下載,一共10.78MB,很快可以下完。下載完成后,雙擊安裝程序,即可開(kāi)始CMake的安裝
7、。安裝很簡(jiǎn)單,基本上就是“下一步”,直至最后一步“完成”。我的習(xí)慣,肯定要?jiǎng)?chuàng)建桌面快捷方式了,這樣方便啊當(dāng)然可能不經(jīng)常用,那也可以隨時(shí)刪發(fā)現(xiàn)上面這個(gè)圖沒(méi)有,CMake好強(qiáng)大,自動(dòng)識(shí)別并列出你有的一些程序,當(dāng)然有你的VS了安裝完成后,可以在“開(kāi)始”菜單中找到已經(jīng)安裝好的CMake3.0.1程序的快捷方式"CMake (cmake-gui)"。當(dāng)然,之前已經(jīng)有選擇創(chuàng)建快捷方式,安裝之后,桌面上就有快捷方式。安裝好了以后,下面開(kāi)始進(jìn)行OpenCV源碼的編譯。2 OpenCV2.4.9源碼編譯這里假設(shè)我們已經(jīng)將OpenCV2.4.9的源碼下載并且安裝好了。(如果這一步不知道怎么做,
8、請(qǐng)參看本人另一個(gè)教程學(xué)習(xí)OpenCV的學(xué)習(xí)筆記系列(一)環(huán)境配置)。(這是原網(wǎng)友的話,我之前也寫(xiě)過(guò)一個(gè)關(guān)于各Opencv與各版本VS配置的教程,可以在百度文庫(kù)搜索OpenCV在Visual Studio中的屬性表配置方法(通用),如下圖示。在“開(kāi)始”菜單中點(diǎn)擊“CMake (cmake-gui)”,打開(kāi)CMake程序,此時(shí)將彈出編譯設(shè)置界面。如下圖所示。在"Where is the source code"選項(xiàng)的文本框中輸入OpenCV源碼所在的目錄路徑(opencv文件提取的位置),可以點(diǎn)擊"Browse Source"選擇文件夾,請(qǐng)根據(jù)源碼安裝的實(shí)際
9、位置選擇路徑,此處選擇的是"H:/opencv/sources"。在"Where to build the binaries"選項(xiàng)的文本框中輸入需要構(gòu)建樣例工程及源碼的文件目錄路徑,此處選擇的是與源碼同一文件夾下的"H:/OpenCV/Solution"。輸入完源碼路徑及生成路徑之后,點(diǎn)擊編譯設(shè)置界面左下角的"Configure"按鈕。如果是第一次配置,那么將會(huì)彈出一個(gè)選擇生成工程目標(biāo)環(huán)境的界面,此處選擇“Visual Studio 10 2010”選項(xiàng),勾選"Use default native com
10、pilers",然后點(diǎn)擊"Finish"按鈕。因?yàn)槲沂褂玫氖荲S2010,而且與opencv配置的也只有VS2010。如果生成目標(biāo)目錄路徑不存在,那么會(huì)有一個(gè)提示新建目錄的對(duì)話框,如下圖所示,直接點(diǎn)"Yes"即可。第一次配置會(huì)出現(xiàn)很多紅色的選項(xiàng),別管它,再點(diǎn)擊一次"Configure"按鈕。這一次,紅色選項(xiàng)沒(méi)有了,說(shuō)明沒(méi)有問(wèn)題了,配置完成。點(diǎn)擊"Generate"按鈕在看到最下方有"Generating done"字樣后,說(shuō)明源碼工程編譯完畢。3 OpenCV2.4.9源碼工程測(cè)試打開(kāi)
11、上一步設(shè)置的生成目錄路徑下的文件夾,可見(jiàn)有一個(gè)"Solution"文件夾,這個(gè)是上一步設(shè)置中自動(dòng)生成的,雙擊該文件夾。在"H:/opencv/Solution"路徑下,我們可以看到有一個(gè)已經(jīng)編譯生成好了的VS2010工程文件"OpenCV.sln",雙擊該文件,既可以在VS2010中打開(kāi)該工程文件。在打開(kāi)的"OpenCV"工程中,我們可以看到有68個(gè)項(xiàng)目。右鍵點(diǎn)擊OpenCV解決方案,選擇生成解決方案。編譯用時(shí)較長(zhǎng),我的PC配置算是比較好的,但是編譯也一共耗時(shí)約2分鐘左右,生成62個(gè)工程,失敗0個(gè),說(shuō)明全部編譯通過(guò)
12、。恭喜自己一下!接下來(lái),就可以逐個(gè)工程去查看,編譯了。關(guān)于這些樣例工程及源碼的解釋?zhuān)罄m(xù)將補(bǔ)充。(這話是原作者說(shuō)的不是我說(shuō)的?。? OpenCV2.4.9自帶樣例源碼編譯及測(cè)試以上介紹的是OpenCV的源碼編譯及工程,下面介紹怎么編譯OpenCV自帶的樣例源碼及工程。熟門(mén)熟路地打開(kāi)CMake3.0.1,將源碼路徑改為:"H:/opencv/sources/samples"(具體路徑隨安裝位置而不同,在opencv的源碼安裝目錄下可以找到“sample”文件夾)。在一通配置(Configure)及生成(Generate)后(配置項(xiàng)同上,此處不贅述?。?,在目標(biāo)目錄下,可以找到已
13、經(jīng)生成好了的OpenCV的樣例工程文件:“samples.sln”點(diǎn)擊打開(kāi)"samples.sln",看到解決方案資源管理器中顯示一共有172個(gè)項(xiàng)目(樣例真多,好好看哈?。┯益I點(diǎn)擊解決方案,選擇“生成解決方案”大概一分鐘左右(不同機(jī)器配置,編譯時(shí)間有差別),編譯完成,工程生成171個(gè)工程,失敗0個(gè),一次編譯通過(guò),點(diǎn)個(gè)贊!整體編譯無(wú)誤后,隨手打開(kāi)一個(gè)樣例工程,本文選擇“(EXAMPLE) lkdemo”工程。此工程源碼使用改進(jìn)的Lucas-Kanade光流算法,用于檢測(cè)視頻運(yùn)動(dòng)目標(biāo)。用鼠標(biāo)點(diǎn)擊目標(biāo)點(diǎn),可視頻跟蹤。點(diǎn)擊運(yùn)行,發(fā)現(xiàn)一個(gè)命令行界面一閃而過(guò),之后就退出了,這是為什么呢
14、?通過(guò)單步運(yùn)行調(diào)試發(fā)現(xiàn),在“l(fā)kdemo.cpp”文件的56行的"if( !cap.isOpened() );"判斷語(yǔ)句中,播放器沒(méi)有打開(kāi),直接在控制臺(tái)顯示一行“Couldnot initialize capturing”就退出了。分析其原因,是因?yàn)椤癱ap.open("Megamind.avi");”這個(gè)語(yǔ)句中的視頻文件“Megamind.avi”不在程序目錄下。知道原因,就好解決了!在“H:opencvsourcessamplescpp”目錄下(源碼文件目錄)拷貝“Megamind.avi”文件至“H:opencvsampleSolutioncppD
15、ebug”目錄下(此乃程序“cpp-example-lkdemo.exe”所在目錄)。換句話說(shuō),就是要確保在程序運(yùn)行的目錄下有“Megamind.avi”文件即可。在做完以上工作后,再次點(diǎn)擊運(yùn)行,就成功運(yùn)行了,播放的是一個(gè)動(dòng)畫(huà)片,在畫(huà)面的一處點(diǎn)擊左鍵后,會(huì)有一個(gè)綠色的標(biāo)記點(diǎn),該標(biāo)記點(diǎn)的位置會(huì)隨著周?chē)矬w的運(yùn)動(dòng)而改變,這應(yīng)該就是所謂的視頻跟蹤了。截圖如下: OK,這其中的原理及工作流程我就不介紹了,自己看源碼,其他樣例工程的源碼可以一個(gè)個(gè)去看,然后編譯運(yùn)行,相信將這些樣例都熟悉理解摸透后,OpenCV對(duì)你將不再陌生。歡迎你步入OpenCV的殿堂,開(kāi)始你的學(xué)習(xí)階段吧!以上的內(nèi)容大大部分都是來(lái)自文章
16、開(kāi)頭的網(wǎng)址,不得不說(shuō),這位網(wǎng)友真心啊,寫(xiě)的太詳細(xì)了,我粘貼都粘貼了半天,這里再次表示感謝,也鼓勵(lì)大家去原網(wǎng)址看看接下來(lái)的,是我要說(shuō)的重點(diǎn),可能大家發(fā)現(xiàn)了,前面的步驟是不是非常順利,不知道你按照上面來(lái),是不是也這么順利,總之,我是出現(xiàn)了各種問(wèn)題,當(dāng)然如果你已經(jīng)順利了,就不用看下面的了5 各種問(wèn)題5.1 Opencv版本問(wèn)題原作者使用的是opencv2.4.9,本人使用的是opencv2.4.11,且我使用的CMake也不是3.0.1,而是3.4.1,這些可能帶來(lái)一些差異,具體不知道,只是有一個(gè)是去確定的,在opencv2.4.11中,lkdemo.cpp做了些改動(dòng),它不再使用Megamind.a
17、vi了,而是直接調(diào)用你的電腦攝像頭,因此,不知道其他版本的又是怎樣,總之,列些這條就是想申明一點(diǎn),可能有這些差異。5.2 編譯sample出問(wèn)題在第4章中,利用CMake編譯opencv自帶的示例程序,其實(shí)原作者寫(xiě)的再詳細(xì)不過(guò)了,但是我就是出現(xiàn)了一些問(wèn)題,幾經(jīng)百度,終于解決了,問(wèn)題如下:選擇完文件夾之后,點(diǎn)擊configure,半途跳出出錯(cuò)提示框(當(dāng)時(shí)沒(méi)有及時(shí)截圖,真是失敗),然后我在下面的提示框(就是下圖下方的提示框)中找,里面有一段紅色的文字描寫(xiě)出現(xiàn)的錯(cuò)誤,請(qǐng)?jiān)彯?dāng)時(shí)一心想著解決問(wèn)題,并沒(méi)截圖,總之問(wèn)題是(當(dāng)時(shí)用這個(gè)搜索的):CMake Error at CMakeLists.txt:40
18、 (find_package): ,還有幾句話說(shuō)的更詳細(xì),說(shuō)什么CMake找不到OpenCVConfig.cmake之類(lèi)的,問(wèn)題的具體表現(xiàn)是,下圖中紅色圈起來(lái)的值為空。(雖沒(méi)截圖,這樣描述大概清楚了,紅色圈起部分原先為空,截的圖是我解決之后截的,因此有值)幾經(jīng)嘗試,還是configure失敗,終于,讓我在網(wǎng)上搜到了,這里給出網(wǎng)址:不得不說(shuō),這人是個(gè)牛人啊,我立刻反應(yīng)到CMake的搜索路徑里,可能沒(méi)有包含OpenCVConfig.cmake的路徑,于是在上圖中紅色方框里,對(duì)OpenCV_DIR進(jìn)行了賦值,OpenCVConfig.cmake所在的地方,上面的牛人說(shuō)了,在opencvbuildx8
19、6vc10lib(注意這里是我的是vs2010,因此選擇的vc10,如果還是出錯(cuò),有可能是不是vs2010造成,要選其他的(猜測(cè))如下圖示, 注意不要點(diǎn)擊上圖中的add entry新建一個(gè)環(huán)境變量,CMake了已經(jīng)有了環(huán)境變量Opencv_DIR。然后在點(diǎn)擊configure,天吶,成功了,此刻的我心情一頓激動(dòng),再點(diǎn)擊generate,也沒(méi)有問(wèn)題,真真是樂(lè)壞了啊5.3 運(yùn)行l(wèi)kdemo.cpp問(wèn)題滿以為,編譯完sample之后,打開(kāi)生成的samples.sln文件之后,并按第4章講的,形成解決方案之后,就可以盡情玩耍了,可以任意運(yùn)行里面的例子了,沒(méi)曾想到,我一運(yùn)行,就跳出或者是這個(gè):此刻,我的
20、心情是崩潰的,因?yàn)闉榻鉀Q5.2中的問(wèn)題我已經(jīng)很煩了,緊接著又來(lái)這么個(gè)問(wèn)題,但還是靜下心來(lái)解決他,畢竟我想運(yùn)行里面的示例程序啊幾經(jīng)百度,牛人真的是有啊,給出網(wǎng)址: (有沒(méi)有注意,和5.2給出的網(wǎng)址是同一個(gè)論壇上的,看樣子這個(gè)論壇很有價(jià)值?。┪宜阉饔玫年P(guān)鍵字是:unable to start program all_build。這位牛人給出的關(guān)鍵性回答如下:看到點(diǎn)贊的人數(shù)居然有35之多,看樣子遇到這個(gè)問(wèn)題的人還不少,同時(shí)反映出這個(gè)牛人給的方法是好的。我的理解是,因?yàn)閟ample里面有很多的示例程序,在經(jīng)過(guò)CMake編譯之后,我們?cè)俚絍S2010界面形成解決方案,這個(gè)解決方案是一個(gè)總的解決方案,每個(gè)
21、示例程序都是其中的一個(gè)工程(一個(gè)方案下可以有多個(gè)工程,一個(gè)工程下有很多的源文件),但是這么多工程放在一起,你隨意挑一個(gè)工程,比如打開(kāi)其源文件,點(diǎn)運(yùn)行,那么就有問(wèn)題了。這么多工程在同一個(gè)方案下,憑什么點(diǎn)運(yùn)行就是運(yùn)行l(wèi)kdemo工程呢,就因?yàn)槟愦蜷_(kāi)了其源文件嗎?顯然不是,牛人這樣說(shuō)的:Guessing from the information I have, you're not actually compiling the program, but trying to run it. That is, BUILD_ALL is set as your startup project. (
22、It should be in a bold font, unlike the other projects in your solution) If you then try to run/debug, you will get the error you describe, because there is simply nothing to run,大概的意思是,這些文件并沒(méi)有真正的被編譯,你直接想去運(yùn)行當(dāng)然要出錯(cuò)了,出現(xiàn)“Unable to start program 'D:Program FilesEXPMyProject-binDebugALL_BUILD”這個(gè)錯(cuò)誤是因?yàn)槟?/p>
23、將BUILD_ALL工程設(shè)置為啟動(dòng)工程,這個(gè)工程在所有列出工程的最下面也許你看出來(lái)了,上面提到的另一種錯(cuò)誤形式是關(guān)于INSTALL的,沒(méi)錯(cuò),也就是你設(shè)置了INSTALL為整個(gè)方案的啟動(dòng)工程了,這兩個(gè)工程,其實(shí)都是沒(méi)有真正編譯形成.exe文件的,因此不能作為啟動(dòng)工程,可以找到samples.sln文件所在文件夾中的debug文件夾是空的,如下圖示而正常來(lái)說(shuō),編譯完之后里面有對(duì)應(yīng)工程的.exe文件才是,不信你可以看看你以前建立的工程文件。牛人的第二句話就更牛了: The project is most likely generated via CMAKE and included in your Visual Studio solution. Set any of the projects that do generate a .exe as the startup project (by right-clicking on the project and selecting "set as startup project") and you will most likely will b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)工和病人協(xié)議合同書(shū)(2篇)
- 2025年孝感b2貨運(yùn)資格證多少道題
- 2024年物業(yè)電梯緊急救援協(xié)議3篇
- 2025年臨沂貨運(yùn)資格證考試題庫(kù)
- 2024年度精準(zhǔn)崗位聘任合同范本2篇
- 2025年延邊下載貨運(yùn)從業(yè)資格證模擬考試
- 2025年西寧貨運(yùn)從業(yè)資格證網(wǎng)上考試
- 2025年運(yùn)城貨運(yùn)從業(yè)資格證網(wǎng)上考試答案
- 2025年深圳貨運(yùn)從業(yè)資格證考試模擬
- 《輪胎生產(chǎn)流程》課件
- 安徽省蚌埠市聯(lián)考2024-2025學(xué)年七年級(jí)上學(xué)期12月期末考試英語(yǔ)試題(無(wú)答案)
- 心理健康課件教學(xué)課件
- 2024至2030年中國(guó)甲醚化氨基樹(shù)脂行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 貴州省建筑工程施工資料管理導(dǎo)則
- 2024年度鋼模板生產(chǎn)與銷(xiāo)售承包合同3篇
- 《QHSE體系培訓(xùn)》課件
- 計(jì)量經(jīng)濟(jì)學(xué)論文-城鎮(zhèn)單位就業(yè)人員工資總額的影響因素
- 《農(nóng)業(yè)企業(yè)經(jīng)營(yíng)管理》試題及答案(U)
- 山東省聊城市2024-2025學(xué)年高一上學(xué)期11月期中物理試題
- 太陽(yáng)能路燈維護(hù)與保養(yǎng)方案
- 孫悟空課件教學(xué)課件
評(píng)論
0/150
提交評(píng)論