VS2013+OpenCV3.0編譯CMT跟蹤演算法
這個演算法的全稱是Clustering of Static-Adaptive Correspondences for Deformable Object Tracking,文章發表在CVPR2015上,官方的網址為: http://www.gnebehay.com/cmt/ 這個作者就是OpenTLD的C++版本的作者,包括ROS版的OpenTLD也是基於他的程式碼改的。
-1. 下載原始碼,並且解壓,我是解壓到F盤根目錄的。F:\CppMT-master -2. 開啟裡面的fastcluster.cpp後,找到heapify()函式,修改成下面:
void heapify() {
// Arrange the indices I and R so that H[i] := A[I[i]] satisfies the heap
// condition H[i] < H[2*i+1] and H[i] < H[2*i+2] for each i.
//
// Complexity: Θ(size)
// Reference: Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms,
// 3rd ed., 2009, Section 6.3 “Building a heap”
// t_index idx; 註釋這裡
int_fast32_t idx;//新增這句
for (idx=(size>>1 ); idx>0; ) {
--idx;
update_geq_(idx);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-3. 在F盤根目錄下新建一個BuildCppMT資料夾,用來存放適合VS2013工程檔案。 -4. 下載最新的CMake工具,https://cmake.org/download/ 我自己用的是CMake 3.4.0 RC -5. 安裝OpenCV,必須是2.4.8以上,我用的是3.0,最新版本3.1是不行的,個人覺得因為裡面沒有x86的庫,如果你自己編譯x86庫就可能可以。因為OpenCV官網不翻牆是上不了的,所以我還是給出3.0的下載連結https://yunpan.cn/cqF2Eps8WApZS
在path環境變數裡面新增:D:\OpenCV3.0\opencv\build\x86\vc12\bin
新建一個OpenCV_DIR變數,值為:D:\OpenCV3.0\opencv\build
- 1
- 2
-7. 開啟CMake,然後配置如下圖:
-8.點選Configure,選擇VS2013編譯器後,點選Finish,然後再點選一下Configure。如下圖:
-9. 點選Generate生成工程檔案。 -10. 用VS2013開啟BuildCppMT檔案裡面的CMT.sln工程。在這裡我們可以看到四種生成配置,四種生成配置最後都會生成cmt.lib靜態庫,記得是靜態庫,其實這四種四種生成配置實現的效果都是一樣的,只是有的是為帶輸出除錯的lib檔案,有的是體積比較小的lib檔案,所以你可以只編譯Release就行了,下面就為每一種生成配置都單獨編譯一次。
- 選擇Debug版本的配置。開啟cmt工程的屬性頁面,按照圖片設定:
然後點選[生成]-[生成解決方案],大概幾十秒就看到資料夾裡面有一個Debug的目錄,裡面就有cmt.lib檔案。
- 選擇MinSizeRel生成配置,同樣來到cmt的屬性頁裡面,修改執行庫為/MTd,然後跟第一種編譯方式一樣。
- 選擇Release生成配置,來到cmt的屬性頁面裡面,修改執行庫為/MT,然後編譯。
- 選擇RelWithDebInfo生成配置,來到cmt的屬性頁面裡面,同樣修改執行庫為/MTd,然後編譯。
-11.編譯完成後就看到裡面有四個資料夾對應四種生成。
這時候可以試試執行裡面的cmt.exe這個demo,因為博主見不了人就不截圖了~~~