sift演算法的編譯與實現
九之續、sift演算法的編譯與實現
作者:July 、二零一一年三月一日。
程式碼:Rob Hess維護的sift 庫,July updated。
環境:windows xp+vc6.0。
條件:opencv1.0、gsl-1.8.exe
-----------------------------------------------
昨日,下載了Rob Hess的sift庫,將其原始碼粗略的看了看,想要編譯時,遇到了不少問題,先修改了下程式碼,然後下載opencv、gsl。最後,幾經周折,才最終編譯成功。
以下便是sift原始碼庫編譯後的效果圖:
為了給有興趣實現sift演算法的朋友提供個參考,特整理此文如下。要了解什麼是sift演算法,請參考:九、影象特徵提取與匹配之SIFT算法。ok,我們們下面,就來利用Rob Hess維護的sift 庫來實現sift演算法:
首先,請下載Rob Hess維護的sift 庫:
http://blogs.oregonstate.edu/hess/code/sift/
下載Rob Hess的這個壓縮包後,如果直接解壓縮,直接編譯,那麼會出現下面的錯誤提示:
編譯提示:error C1083: Cannot open include file: 'cxcore.h': No such file or directory,找不到這個標頭檔案。
這個錯誤,是因為你還沒有安裝opencv,因為:cxcore.h和cv.h是開源的OPEN CV標頭檔案,不是VC++的預設安裝檔案,所以你還得下載OpenCV並進行安裝。然後,可以在OpenCV資料夾下找到你所需要的標頭檔案了。
據網友稱,截止2010年4月4日,還沒有在VC6.0下成功使用opencv2.0的案例。所以,如果你是VC6.0的使用者請下載opencv1.0版本。vs的話,opencv2.0,1.0任意下載。
以下,我們們就以vc6.0為平臺舉例,下載並安裝opencv1.0版本、gsl等。當然,你也可以用vs編譯,同樣下載opencv(具體版本不受限制)、gsl等。
請按以下步驟操作:
一、下載opencv1.0
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/1.0/OpenCV_1.0.exe/download
二、安裝opencv1.0,配置Windows環境變數
1、安裝注意:假如你是將OpenCV安裝到C:/Program Files/OpenCV(如果你安裝的時候選擇不是安裝在C盤,則下面所有對應的C盤都改為你所安裝在的那個“X盤”,即可),在安裝時選擇"將/OpenCV/bin加入系統變數",打上“勾”。(Add/OpenCV/bin
to the systerm PATH。這一步確認選上了之後,下面的檢查環境變數的步驟,便可免去)
2、檢查環境變數。為了確保上述步驟中,加入了系統變數,在安裝opencv1.0成功後,還得檢查C:/Program Files/OpenCV/bin是否已經被加入到環境變數PATH,如果沒有,請加入。
3、最後是配置Visual C++ 6.0。
全域性設定
選單Tools->Options->Directories:先設定lib路徑,選擇Library files,在下方填入路徑:
C:/Program Files/OpenCV/lib
然後選擇include files,在下方填入路徑(參考下圖):
C:/Program Files/OpenCV/cxcore/include
C:/Program Files/OpenCV/cv/include
C:/Program Files/OpenCV/cvaux/include
C:/Program Files/OpenCV/ml/include
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/otherlibs/cvcam/include
最後選擇source files,在下方填入路徑:
C:/Program Files/OpenCV/cv/src
C:/Program Files/OpenCV/cxcore/src
C:/Program Files/OpenCV/cvaux/src
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/otherlibs/cvcam/src/windows
專案設定
每建立一個將要使用OpenCV的VC Project,都需要給它指定需要的lib。選單:Project->Settings,然後將Setting for選為All Configurations,然後選擇右邊的link標籤,在Object/library modules附加上:
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
當然,你不需要這麼多lib,你可以只新增你需要的lib(見下圖)
三、下載gsl,gsl也是一個庫,也需要下載:
http://sourceforge.net/projects/gnuwin32/files/gsl/1.8/gsl-1.8.exe/download。在編譯時候GSL也是和OpenCV一樣要把標頭檔案和lib的路徑指定好。
四、配置gsl
將C:/WinGsl/bin中的WinGsl.dll和WinGslD.dll複製到C:/VC6.0/Bin;將整個Gsl目錄複製到C:/VC6.0/Bin下;lib目錄下的所有.lib檔案全部複製到C:/VC6.0/Lib下。
然後,在tools-options-directories中,將C:/WinGsl下的lib,gsl分別加入到庫檔案和標頭檔案的搜尋路徑中。
以下是可能會出現的錯誤情況處理:
I、OpenCV安裝後“沒有找到cxcore100.dll”的錯誤處理
在安裝時選擇“將/OpenCV/bin加入系統變數”(Add/OpenCV/bin to the systerm PATH)。 但該選項並不一定能成功新增到系統變數,如果編寫的程式在執行時出現“沒有找到cxcore100.dll,因為這個應用程式未能啟動。重新安裝應用程式可能會修復此問題。”的錯誤。
手動在我的電腦->屬性->高階->環境變數->系統變數->path新增c:/program files/opencv/bin;新增完成後需要重啟計算機。
II、vc6.0下配置了一下,可是編譯程式時遇到如下一個錯誤:
Linking... LINK : fatal error LNK1104: cannot open file"odbccp32.libcxcore.lib"
可能是:在工程設定的時候新增連線庫時沒加空格或.來把兩個檔名(odbccp32.lib cxcore.lib)分開。注意每一次操作後,記得儲存。
若經過以上所有的步驟之後,如果還不能正常編譯,那就是還要稍微修改下你下載的Rob Hess程式碼。ok,日後,若有空,再好好詳細剖析下此sift的原始碼。最後,祝你編譯順利。
updated
今天下午試了下sift + KD + BBF,然後用兩幅不同的圖片做了下匹配(當然,執行結果顯示是不匹配的),效果還不錯:http://weibo.com/1580904460/yDmzAEwcV#1348475194313!
同時,編譯的過程中,直接用的VS2010 + opencv(並沒下gsl)。2012.09.24。完。
相關文章
- 3.SIFT特徵提取與ransac演算法特徵演算法
- 4.SIFT特徵提取與ransac演算法特徵演算法
- SIFT演算法與SURF演算法特徵檢測效率對比演算法特徵
- 教你一步一步用c語言實現sift演算法C語言演算法
- Java編譯與反編譯Java編譯
- SIFT演算法學習小記演算法
- 從編譯原理看一個直譯器的實現編譯原理
- 【影像處理筆記】SIFT演算法原理與原始碼分析筆記演算法原始碼
- 編譯原理 LL1文法First集演算法實現編譯原理演算法
- CMM編譯器和C編譯器過程呼叫實現的比較編譯
- 經典演算法研究系列:九、影象特徵提取與匹配之SIFT演算法演算法特徵
- 實現一個簡單的 JavaScript 編譯器JavaScript編譯
- 基於.net standard 的動態編譯實現編譯
- gcc 編譯器與 clang 編譯器GC編譯
- 基於C++和OpenCv的SIFT_影象區域性特徵檢測演算法程式碼的實現C++OpenCV特徵演算法
- 從零實現最簡編譯模型編譯模型
- SIFT定位演算法關鍵步驟的說明演算法
- sift和surf演算法的一些說明演算法
- Java程式碼的編譯與反編譯那些事兒Java編譯
- ant指令碼實現的Android自動編譯指令碼Android編譯
- VirtualView Android實現詳解(一)—— 檔案格式與模板編譯ViewAndroid編譯
- [Web翻譯]JavaScript中的編譯與填充WebJavaScript編譯
- Ubuntu20.04linux核心(5.4.0版本)編譯準備與實現過程-編譯過程(2)UbuntuLinux編譯
- 編譯實體Bean出現如下錯誤.....編譯Bean
- Rust 交叉編譯與條件編譯總結Rust編譯
- 比較BF、KMP和BM演算法的效能(純C語言實現,而且……VC6.0編譯的程式跑得比codeblocks 17.12編譯的快)KMP演算法C語言編譯BloC
- 貪心演算法——Huffman 壓縮編碼的實現演算法
- KNN演算法推理與實現KNN演算法
- Xopsed的編譯與安裝編譯
- apk 包的破解與反編譯APK編譯
- 原始碼的下載與編譯原始碼編譯
- Android核心的編譯與裁剪Android編譯
- 實現交叉編譯gdb和gdbserver(gdb-7.6)編譯Server
- CentOS6.5實現Hadoop_2.8.1編譯CentOSHadoop編譯
- nginx 編譯出現的問題Nginx編譯
- 決策樹演算法的推理與實現演算法
- 並查集的概念與演算法實現並查集演算法
- 建構函式與new的彙編實現函式