作者:July | 日期:2011年3月1日
昨日下載了Rob Hess維護的SIFT庫,瀏覽源碼後嘗試編譯,卻遇到不少棘手問題。經過代碼修改、下載OpenCV與GSL庫,歷經多次嘗試終於編譯成功。為了給有興趣實現SIFT算法的開發者提供參考,特整理此文記錄完整編譯流程。若需了解SIFT算法原理,請參考前文《圖像特徵提取與匹配之SIFT算法》。
以下為SIFT源碼庫編譯成功後的運行效果圖:



下載地址:https://blogs.oregonstate.edu/hess/code/sift/
直接解壓編譯會報錯:error C1083: Cannot open include file: cxcore.h,原因是缺少OpenCV頭文件。
根據網友反饋,VC6.0下暫無OpenCV 2.0成功案例,建議使用1.0版本。
C:\Program Files\OpenCV
選單 Tools → Options → Directories:
C:\Program Files\OpenCV\libC:\Program Files\OpenCV\cxcore\includeC:\Program Files\OpenCV\cv\includeC:\Program Files\OpenCV\cvaux\includeC:\Program Files\OpenCV\ml\includeC:\Program Files\OpenCV\otherlibs\highguiC:\Program Files\OpenCV\otherlibs\cvcam\includeC:\Program Files\OpenCV\cv\srcC:\Program Files\OpenCV\cxcore\srcC:\Program Files\OpenCV\cvaux\srcC:\Program Files\OpenCV\otherlibs\highguiC:\Program Files\OpenCV\otherlibs\cvcam\src\windows
選單 Project → Settings → Link,Object/library modules 添加:
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
可按需精簡,僅保留必要庫文件。

C:\WinGsl\bin 下的 WinGsl.dll 和 WinGslD.dll 複製到 C:\VC6.0\BinGsl 目錄複製到 C:\VC6.0\Binlib 目錄下所有 .lib 文件複製到 C:\VC6.0\Lib手動將 C:\Program Files\OpenCV\bin 添加至系統環境變量 PATH,完成後需重啟電腦。
專案設置中庫文件名稱間缺少空格分隔,應為 odbccp32.lib cxcore.lib。修改後記得保存專案。
完成上述步驟後若仍無法編譯,可能需微調Rob Hess源碼。日後有機會再深入剖析SIFT源碼實現細節。祝各位編譯順利!