1. 程式人生 > >最新版libvibe++移植到Windows

最新版libvibe++移植到Windows

vibe是一種畫素級的前景檢測演算法,實時性高,記憶體佔有率低,前景檢測準確率高。但是會出現“鬼影”,當然基於對鬼影的處理,也會有相應的對vibe演算法的改進。
把下面三篇文章看明白,基本就會掌握vibe演算法的過程:
《 ViBe: a powerful random technique to estimate the background in video sequences》
《Background Subtraction: Experiments and Improvements for ViBe 》
《ViBe: A universal background subtraction algorithm for video sequences》
該演算法的原文連結地址(

http://www.telecom.ulg.ac.be/research/vibe/doc2/index.html),作者已經給出了C/C++程式碼。
但是,根據http://orbi.ulg.ac.be/handle/2268/145853頁面的Source code in C++ [NEW from June 2016] - generic template-based implementation - ideal for experimentation - example for OpenCV來看,最新版vibe是在linux下執行的,我最近要在vs2013+opencv+boost環境執行該程式碼,最初我是將解壓得到的****libvibe++\src\libvibe++資料夾新增到了我的系統路徑下面,不過沒有成功,因為裡面好多相對路徑,我也不太熟悉,我也就沒有在此糾纏,於是就將庫裡面的所有檔案都.c .cpp .t檔案全都拷貝到一個資料夾裡面(也就是我的VS2013的工作路徑),再做以下更改:
1、 .t檔案真的是搞不懂,由於檔案裡是直接用include包含了它,所以我直接將.t檔案的內容複製到包含它的檔案對應位置;
2、把所有檔案裡面的相對路徑全部去掉,只留檔名部分;
3、檔案裡面好多STRONG_INLINE,真的搞不懂,也沒有找到其定義,於是直接將其替換為inline;
4、ViBe_8UC3.cpp中名稱空間ViBe和重定義型別typedef ViBeSequential<3, Manhattan<3> > ViBe衝突了,於是將重定義型別換一個名字就行了(typedef ViBeSequential<3, Manhattan<3> > ViBeclass)
5、型別指示不明確,types.h裡面的諸如typedef boost::int8_t int8_t;和標準庫裡面的stdint.h裡面的int8_t重名了,所以我就捨棄了types.h,轉而直接用boost::int8_t避免了歧義,其他幾個同理。
最終可執行的程式碼放在了這裡
http://pan.baidu.com/s/1kVrxpzh
,將cpp檔案和vibesource資料夾放在同一個目錄就可以了。
但是最終的前景提取還有個不足:在第一幀開始後,有鬼影。
當然以上的5點更改並不是唯一的,只是我沒有再去嘗試其他更改了,比如可以使用stdint.h裡面的型別而不是boost的,專案進度跟不上啦啦啦啦啦。