Robomaster視覺教程(一)談談搞視覺應該會的C++知識

在這裏插入圖片描述
以下是整理出的視覺入門opencv學習的C++知識點總結,畢竟之後主要要講的是計算機視覺方面的東西,其中的概念只是點到爲止,希望大家可以將模糊的概念百度一下,最好也能總結一下,C++的學習是基礎中的基礎,筆者會不定期更新和完善。(其中帶*的內容爲可選學內容)

一、預備

  1. 瞭解C++標準(C99、C11等)(視覺新手經常會遇到的錯誤往往不是opencv的,而是不熟悉IDE或者C++標準版本所致)
  2. C++風格註釋(偷懶代碼不寫註釋?後期調車呵呵呵,寫註釋不僅僅是爲了眼前,更爲了傳承,強校的視覺開源代碼註釋寫的都很棒,不僅要站在巨人的肩膀上,也要學習巨人的工作方式
  3. 頭文件是什麼?(就只會#include <iostream> 可不行,我們要自己寫自己的頭文件,自己調用)
  4. 命名空間*(當工程比較複雜時,用命名空間可以節省一些寫代碼的力氣,但是還是推薦儘量在主要變量或者函數前加上對應命名空間 namespace::method()
  5. 基本數據類型int、float、double……)
  6. 代碼規範很重要!! 多人聯合編寫代碼的時候必須保證步調統一,水平高不高一看寫的代碼就看出來了
  7. 函數式編程(比起面向對象編程,首先要學會函數式編程)

二、基礎

  1. 分支語句(簡單常用必會)

  2. 循環結構(學會增強for循環,迭代器等)

  3. 三元運算符(布爾表達式 ?a情況:b情況,常用在return語句中)

  4. ++和 - -(a++和++a的區別要熟練掌握)

  5. break和continue(這部分記住一點,就是發揮作用時跳出的就是離關鍵詞最近的一個for或者while循環,在燈條和裝甲板篩選的時候會經常看到它們的身

    影,最大的作用就是節省性能)

  6. 浮點誤差(你可以輸出double(1)小數後十幾位試試,具體的百度吧,難兄難弟一大把)

  7. 類型轉換(用的不多,但是簡單,還是有必要學一下的)

  8. 實參和形參(簡單常用必會)

  9. 局部和全局(簡單常用必會)

  10. 運算符優先級(其實多加括號可以解決這個問題,但是最好還是看看)

  11. 邏輯表達式(簡單常用必會)

  12. 輸入輸出流(搞明白流的原理,之後常用)

  13. const修飾符和#define修飾符(都可以充當自定義常量的功能,當然const的功能不止這些)

  14. 函數的返回值(函數的返回值遠不止int幾個基本類型,還會返回Mat、數組等)

  15. 函數的參數列表(和返回值一樣,也很重要,因爲常用,所以要喫透)

  16. 函數重載(尤其是構造函數重載,用到的地方也很多)

  17. 數組(數組是基礎班釘子戶,因爲這時候指針可能進來攪和了,並不容易一下完全掌握,最好在應用中學習,用到哪查到哪,因爲使用率高,漸漸也就學會了,注意學一下如何把數組在各個函數中傳來傳去)

  18. 面向對象編程(這部分比較難,內容也比較多,但是成熟的視覺代碼都是用面向對象寫的,這裏有些疑難問題可以先跳過,不要浪費過多時間,最後回頭再看往往會有恍然大悟之感)

  19. 繼承(三種繼承方式、構造函數、析構函數)

  20. 封裝privatepublicprotected,公有和私有,增加代碼安全性)

  21. 多文件編程(RM視覺部分的代碼量也可以算是一個小項目,我們一般創建一個工程,在工程中使用頭文件和源文件配合編程)

  22. 模版類vector非常重要!非常常用!數組的替代品!

  23. 指針(事故多發區!多看多學多查多總結,還是說不要浪費時間死磕,你儘管多犯錯誤,其他的交給時間)

  24. C++的引用(這部分是重點也是難點,但是引用就是變量的別名,比傳指針要簡單一些,用的也比較多)

  25. String類*(用的很少,但是不學這個難說學會C++了吧,算法題的瑞士軍刀)

三、進階

  1. 結構體(學完類學這個就簡單很多,有些源代碼還在用着結構體,也要學會)

  2. 枚舉(有時會用來將裝甲板和數字做一個映射)

  3. 如何獲取系統時間?(用來測試程序耗時)

  4. 二維數組,vector嵌套vector<vector<Point2d>>常用來表示一個點)

  5. 異常機制(這部分關乎你寫的程序的健壯性和安全性,雖然會變複雜一些,但是在一些關鍵部分必須上)

  6. 智能指針(智能指針出了作用域自動釋放,你說香不香?)

  7. STL模版庫(都瞭解瞭解,主要用其中的vector

  8. 多線程中級編程必學併發編程,cpu有的是力氣,合理安排提高效率

  9. if define-endif用法(一般用來指定編譯代碼塊,可以用來選擇是否開啓調試或者其他模式)

  10. 遞歸*(瞭解一下)

  11. IO流*(可以用來保存珍貴的實戰比賽第一視角視頻,機器學習等方向也要用到讀寫文件)

好了,今天這篇文章就到這裏啦,筆者會不定期做一些技術分享和工具使用心得,歡迎大家點贊和收藏!

參考資料:C++ Primer Plus
致謝:感謝馬同學和章同學提出的見解和補充!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章