1. 程式人生 > >OpenCV學習筆記(八)—— OpenCV 3.1.0 + opencv_contrib編譯(Windows)

OpenCV學習筆記(八)—— OpenCV 3.1.0 + opencv_contrib編譯(Windows)

        由於在學習影象識別中的特徵點檢測中,需要用到Surf和Sift演算法,但是這兩個演算法在OpenCV 3.1.0的Release版本中並不存在,因為他們是存放在opencv_contrib目錄下面的未穩定功能模組,所以如果我們想要使用這個目錄的功能,就需要自己重新進行OpenCV的編譯。

一、準備工作:

        安裝過程實際上就是解壓過程,安裝完成後得到:

        

        下載之後直接解壓,得到原始碼目錄:

        

 

        下載完成後,直接解壓即可使用,不必安裝。

二、使用cmake生成OpenCV.sln:

1.開啟cmake-gui\bin目錄下的cmake-gui.exe工具:

   

2.填寫相應引數,包括:OpenCV原始碼目錄OpenCV.sln工程的匯出目錄,開始匯出OpenCV.sln工程:

    

    第一次匯出時需要設定後面用來編譯此OpenCV.sln工程的VS的版本,這裡我用的是VS 2015:

    

    設定完成之後點選“Generate”開始生成工程:

    

3.第一次編譯完成之後,我們需要將額外的opencv_contrib加到工程中進行第二次編譯,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,設定其引數值為open_contrib原始碼包中的modles目錄,我的目錄是“E:\OpenCV\tools\opencv_contrib-master\modules”:

    

設定完成之後點選Configure進行配置,不報錯的話就進行第二次編譯:

    

    第二次編譯一般很快就能完成:

    

    編譯完成後,我們在資源管理器下檢視上面設定的檔案輸出目錄,發現目錄下多出了很多檔案,其實就是OpenCV.sln工程檔案:

    

三、用VS開啟OpenCV.sln工程,編譯生成Debug和Release庫:

1.用VS 2015開啟OpenCV.sln工程,在解決方案中可以檢視工程目錄:

    

2.編譯生成debug版本的庫,記得在此之前要選擇編譯的平臺資訊,這就是編譯生成debug版本和release版本的區別:

    

    在解決方案中選中工程,右鍵選擇重新生成解決方案:

    

    

3.找到CMakeTargets中的INSTALL,然後右鍵選擇“僅限於專案”-->“僅生成INSTALL”:

    

    然後,在工程目錄下的install目錄中,可以看到生成了一堆檔案:

    

四、把新的庫檔案配置到到專案中:

  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. 連結器-->輸入-->附加依賴項,新增: (下面新增的release的版本,注意新增的庫與編譯選項要一致)

opencv_aruco310.lib
opencv_bgsegm310.lib
opencv_bioinspired310.lib
opencv_calib3d310.lib
opencv_ccalib310.lib
opencv_core310.lib
opencv_datasets310.lib
opencv_dnn310.lib
opencv_dpm310.lib
opencv_face310.lib
opencv_features2d310.lib
opencv_flann310.lib
opencv_fuzzy310.lib
opencv_highgui310.lib
opencv_imgcodecs310.lib
opencv_imgproc310.lib
opencv_line_descriptor310.lib
opencv_ml310.lib
opencv_objdetect310.lib
opencv_optflow310.lib
opencv_photo310.lib
opencv_plot310.lib
opencv_reg310.lib
opencv_rgbd310.lib
opencv_saliency310.lib
opencv_shape310.lib
opencv_stereo310.lib
opencv_stitching310.lib
opencv_structured_light310.lib
opencv_superres310.lib
opencv_surface_matching310.lib
opencv_text310.lib
opencv_tracking310.lib
opencv_ts310.lib
opencv_video310.lib
opencv_videoio310.lib
opencv_videostab310.lib
opencv_xfeatures2d310.lib
opencv_ximgproc310.lib
opencv_xobjdetect310.lib
opencv_xphoto310.lib
ippicvmt.lib

4、關於imread的問題。如果圖片名稱是存在txt文件中,用readImageLists方法提取到list列表時,要特別注意txt文件的換行符必須是“UNIX 終束符 -LF"。否則讀取到的檔名會多出"\r"字元,導致讀取影象檔案失敗。