在VS2010中應用SIFT(C)原始碼

2021-07-08 20:27:43 字數 2144 閱讀 9296

ps: 很久沒做cv的事情了,這是很早以前剛入門時候的一篇,以後再有cv相關工作會發布在新的個人站點: cv分類下。

update @ 2013-03-17 15:29 from [freedomshe]

sift的實現有很多版本,具體方式都是那麼幾個,找個好用的不太容易,因為對於**不熟練者各種版本用起來都有點水土不服,需要調整調整才行。本人是在vs2010下使用的rob hess的原始碼。

安裝opencv,詳見:vs2010+opencv-2.4.0的配置攻略(該版本sift是基於opencv的)。

1、解壓sift原始碼,發現有如下檔案:

其中有3個是解決方案資料夾:siftfeat、match和dspfeat,siftfeat工程是做sitf特徵提取的,一般只會用到這個案例,match是利用sift特徵做影象匹配的,desfeat沒用過不說了。

所有源**(包括上面3個工程的main)都在資料夾外面,就是那些成對的.h和.c了。

2、可以先試著跑跑siftfeat。

開啟siftfeat.sln,配置好opencv在vs2010中的環境引數(vs2010+opencv-2.4.0的配置攻略中有述,注意include裡面要新增/include/opencv,因為sift原始碼直接引用了/include/opencv目錄下的標頭檔案)。

編譯報錯:

1>utils.obj : error lnk2001: 無法解析的外部符號 _va_end

1>utils.obj : error lnk2001: 無法解析的外部符號 _va_start

說好了原始碼裡面有些東西是要改的:在utils.c中#include 就ok了。

f5除錯執行,成功顯示:

1、在vs2010中新建自己的c++工程pp。在工程根目錄內新增目錄命名為sift,將sift原始碼檔案imgfeatures.c imgfeatures.h kdtree.c kdtree.h minpq.c minpq.h sift.c sift.h utils.c utils.h xform.c xform.h(即除了match.c siftfeat.c dspfeat.c的所有原始碼檔案)複製到\pp\sift內。

2、在vs2010內引入sift原始碼:在「資源管理器」檢視裡新增「篩選器」,命名為sift,將剛才拷貝過來的sift原始檔引入其內:

3、在需要使用sift方法的地方新增對應標頭檔案:

#include "

..\sift\sift.h

"#include

"..\sift\imgfeatures.h

"#include

"..\sift\utils.h

"

4、取消.c檔案的預編譯:同樣在「資源管理器」檢視下面複選sift資料夾內所有.c檔案,右鍵選擇「屬性」,選取「c/c++」->「預編譯頭」,在「預編譯頭」選項中選擇「不使用預編譯頭」。

5、c語法設定:分別開啟imgfeatures.h和sift.h,讓所有函式包含在

#ifdef __cplusplus

extern"c

"#endif

之間。例如:

ps:我只是用了_sift_features(...)等幾個函式,所以只加了兩個標頭檔案的c語法宣告,如果是用了其他的標頭檔案,均需要新增。

6、綜上,你應該可以直接使用sift相關函式了,參照siftfeat.c中的寫法,用用_sift_features(...)試試!

實際上如果只需要使用sift特徵提取的函式,前面幾步只需要複製imgfeatures.c imgfeatures.h sift.c sift.h utils.c utils.h這6個檔案就夠了。

Crystal Report在VS2010中的使用

vs2010不在像vs2008及以前版本那樣支援crystal report了,不過sap公司還是很給勁的,隨即發布了cr for2010的免費開放版。雖然如此,但剛上手使用的朋友們可能還是很費周折。下簡述使用。上述只適用於執行他人編寫的有關報表的專案,做為開發者則還需進行其他工作。我們使用crys...

Openframework在VS2010中的配置

接著在c c 常規選項裡面新增 附加包含目錄 把openframework資料夾下的lib資料夾下的include資料夾都包含進去,如下圖 接著再新增 鏈結器 裡面 常規 附加庫目錄的內容,把openframework含有lib的資料夾包含進去,如下圖 最後把輸出清單檔案全 否 掉,如下圖 這樣就大...

tesseract OCR庫在vs2010中的呼叫

2.將第2個資源檔案中的tesseract 3.02.02 win32 lib include dirs.zip檔案解壓,將裡面的lib和include資料夾複製到d program files x86 tesseract ocr目錄下 3.將上面資源中第3個資料夾中的liblept168.dll,...