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
致谢:感谢马同学和章同学提出的见解和补充!

在这里插入图片描述

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