編譯opencv2.4.13,編譯opencv3,在opencv3以上環境中使用nonfree等模塊,使用surf等,3.4.3爲例

 

==============================================================================================

==============================================================================================

opencv3

 

 

 

 

 

 

https://opencv.org/releases/page/3/原版壓縮包,分zip和windows的exe。

https://github.com/opencv/opencv/releases/tag/3.4.3  也是一個下載途徑

https://github.com/opencv/opencv_contrib/releases/tag/3.4.3  contrib,也分版本的,要對應吧

(contrib的一個總目錄https://github.com/opencv/opencv_contrib/releases

 

linux的安裝方法(參考的是別人的3.2.2的過程)

1. sudo apt-get install build-essential

2. sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

3. sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev  

cmake(下過了,連接不找了,何況他這是linux的cmake)

build建在源文件路徑下

有專門的參數指定額外的庫

CMAKE_INSTALL_PREFIX安裝路徑

OPENCV_EXTRA_MODULES_PATH模塊路徑

在終端執行以下兩步:

第一步:
cd opencv-3.2.0/build

第二步:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320 -D OPENCV_EXTRA_MODULES_PATH=/home/jason/opencv_contrib-3.2.0/modules/ ..

如果不安裝opencv_contrib模塊,則第二步的命令爲:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320

cmake過程中可能遇到的問題:

如果網絡不好,出現ippicv_linux_20151201.tgz無法在終端下載的情況,則可以先單獨下載ippicv_linux_20151201.tgz之後,把其移動到終端所提示的路徑(終端會提示該路徑找不到文件),如路徑/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/

移動的時候,可以另外打開一個終端操作:
sudo mv ippicv_linux_20151201.tgz /opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e

如果同樣有其他類似的文件無法下載,方法同上。
 

在終端執行以下兩步:

第1步:
sudo make

第2步:
sudo make install

linux下這樣算安裝完成

 

windows版本的cmake過程

 

1.用cmake-gui,選中opencv的根目錄,選中build目錄。

2.點configure,3.4.3+vs2015+default(失敗,別人有個3.0.0-vs2013的,opencv本身是vs不相關的吧??或者說默認的編譯選項太多了?但是我不知道怎麼選啊)

核心問題是編不過去,是找到別人的參考,還是自己根據錯誤把配置選項全刪了?

關掉WITH_CUDA,居然成功了,看來就是CUDA問題。generate也成功了

 

這個表裏不止有選項打鉤,還有變量,在其中找到Name爲OPENCVEXTRAMODULESPATH的參數,然後把它的Value設置爲opencvcontrib的路徑

要精細到modules路徑

 

3.generate生成,生成

 

最後,會得到一個OpenCV.sln?

用VS

打開D:/VS2015/opencv-3.4.0/build/目錄下的OpenCV.sln

 

編譯debug版本庫:在“解決方案'OpenCV'(3.0.0有141個項目?3.4.3我只有30個項目?)”上面點擊右鍵-->重新生成解決方案

實測報錯

http://tieba.baidu.com/p/5682396502

我的3.4.2怎麼報4.0的錯誤?

 

錯了,第二次是139個項目,之前可能是路徑設定再source下的build,可能和其他配置有衝突,互相改寫了?現改名mybuild,好像也不是,選項裏那些build,都是根據輸出路徑自動生成的,修改之後一樣的錯誤

重回cmake,再勾上nonfree,再來一遍,確實是141個項目

 

項目設置是否對?debug,win32?這個主要是輸出install目錄吧,最終還是被引用,所以這裏不用糾結。

改成x64(我機器沒有x86選項)?????

 

 

 

3.找到CMakeTargets中的INSTALL,然後右鍵選擇“僅限於項目”-->“僅生成INSTALL”,然後就在D:\opencv3\opencv\mybuild\install中發現了許多東東。

什麼時候設置?生成之後?

然後是自己項目的引用(這裏的vc12限於VS2013,VS2015應該是vc14

  1. VC++目錄-->包含目錄,添加:
    D:\opencv3\opencv\mybuild\install\include

  2. VC++目錄-->庫目錄,添加:
    D:\opencv3\opencv\mybuild\install\x86\vc12\lib
    D:\opencv3\opencv\mybuild\install\x86\vc12\staticlib

  3. 鏈接器-->輸入-->附加依賴項,添加opencv_xxxxxd.lib(這個見仁見智,不同版本名稱不同,總之就是openc庫目錄的所有)

路徑方面,或者,比如:

D:\VS2015\opencv-3.4.0\mybuild\install\include

D:\VS2015\opencv-3.4.0\mybuild\install\x86\vc14\lib

vc14沒有那個staticlib

 

 

額外的:

surf什麼的屬於收費模塊,應該勾選如下選項?這是否與前邊的錯誤有關?(按理說這是編譯之後使用纔可能出現的錯誤,目前卡在了編譯)但是勾選之後這一步都過不去了,不勾選,好歹是能出sln,頂多是sln編譯不過,

 

 

 

==========================================================================================================================================================================================================================================================================================

 

 

opencv2

 

同樣是在windows用cmake,首先,CUDA肯定是報錯了要關掉(所有流程參考下邊opencv3的操作,除了opencv2不需要額外附加nonfree,過程一樣)。

另外,我opencv2遇到了這個錯

CMake Warning at cmake/OpenCVPackaging.cmake:23 (message): CPACK_PACKAGE_VER

 

這是把cmake中的打印信息複製出來找到的,你的版本號,或者你下載記得。

 

 

找到makelist

這個Makelists.txt文件海量多,需要改的是opencv\sources\目錄的那個

在文件下搜索

if(GIT_EXECUTABLE)

找到這一段,圖中註釋部分是改掉的,原來是unknown,所以不匹配。

不同的是,有人是2.4.13整,我是2.4.13.6,而你也可能是7是8,而且,我也有git(但是可能出現了某種問題吧,比如我的目錄下可能沒git信息,是自己解壓縮的包),所以只改第二個"unknown"(他是沒git,觸發了else)不行,要把第一個改了,兩個unknown,都改成自己的版本,

 

 

===========================================================================

再說下流程,cmake配置和生成sln,sln內部去編譯生成庫,新建vs工程引用生成的庫,運行。

最後運行報錯應用程序無法正常啓動0xc000007b

 

x86需要改成x64,儘管在opencv的工程的編譯選項是win32,貌似認爲是編譯的64(也許是我下的版本)。

改完之後運行成功

 

==============================================================================================

 

最後,既然還是引用?既然還是VS設定include和lib路徑,添加依賴dll,那麼現在編譯一次,和直接解壓一份opencv直接引用,區別是什麼呢?我猜,就是能定製了,尤其是Opencv3,有些非免費的庫不存在,需要自己編譯進來,如果沒有這個需求,比如opencv2,貌似就沒有編譯的必要了。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章