OpenCV學習筆記(三十九)——再談OpenCV的數據結構,Mat是如此強大

還是一個實時性要求的程序最近把我弄得有些上火。爲了提高代碼運行的速度,我也是又新啃東西學了。由於我代碼裏使用了vector,網上搜來搜去有人說vector慢,又有人說STL裏的sort排序速度是我等常人不能企及的,有人說要少resize,這個重新分配內存非常耗時,又有人說要用swap來徹底刪除不要的內存空間。帶着這麼多疑問,我實在不知道我程序慢的原因。於是乎閱讀了《Effective STL》,這書挺深的,粗淺讀讀,先把自己急着弄清楚的以上各問題弄懂。再看程序,做了些優化,速度還是提高不多,頭開始大了

我的解決辦法是用我上一講提到的getTickCount、getTickFrequency函數分析我代碼的運行時間,遇到的問題是下面這句非常耗時

vector<vector<int>>test = vector<vector<int>>(10000, vector<int>(10, 0));

10000*10只是我要開闢的空間,不知道怎麼用reserve函數開闢,這句運行了大概100ms。今天再看這段代碼,發現我太傻了,何必要用vector<vector<int>>呢,完全可以用OpenCV自帶的Mat來解決啊,於是把上面這句改寫如下

Mat test1 = Mat_<int>::zeros(10000, 10);

結果只需要0.2ms!!!同志們,STL在Mat面前都顯得如此無力啊,有木有啊!我決定花費幾天的時間再好好讀讀reference的core的部分,來喫透OpenCV的數據結構。而且感覺Mat跟STL的兼容性很好,也有push_back,pop_back這樣的操作,所以啊,同志們,千萬別把Mat只當做是顯示圖片用的,它是很強大的數據結構,用了它,可以事半功倍,誰用誰知道!~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章