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

來源:互聯網
上載者:User

還是一個即時性要求的程式最近把我弄得有些上火。為了提高代碼啟動並執行速度,我也是又新啃東西學了。由於我代碼裡使用了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只當做是顯示圖片用的,它是很強大的資料結構,用了它,可以事半功倍,誰用誰知道!~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.