概述
以下是整理出的视觉入门opencv学习的C++知识点总结,毕竟之后主要要讲的是计算机视觉方面的东西,其中的概念只是点到为止,希望大家可以将模糊的概念百度一下,最好也能总结一下,C++的学习是基础中的基础,笔者会不定期更新和完善。(其中带*的内容为可选学内容)
一、预备
- 了解C++标准(C99、C11等)(视觉新手经常会遇到的错误往往不是opencv的,而是不熟悉IDE或者C++标准版本所致)
- C++风格注释(偷懒代码不写注释?后期调车呵呵呵,写注释不仅仅是为了眼前,更为了传承,强校的视觉开源代码注释写的都很棒,不仅要站在巨人的肩膀上,也要学习巨人的工作方式)
- 头文件是什么?(就只会
#include <iostream>
可不行,我们要自己写自己的头文件,自己调用) - 命名空间*(当工程比较复杂时,用命名空间可以节省一些写代码的力气,但是还是推荐尽量在主要变量或者函数前加上对应命名空间
namespace::method()
) - 基本数据类型(
int、float、double
……) - 代码规范( 很重要!! 多人联合编写代码的时候必须保证步调统一,水平高不高一看写的代码就看出来了)
- 函数式编程(比起面向对象编程,首先要学会函数式编程)
二、基础
-
分支语句(简单常用必会)
-
循环结构(学会增强for循环,迭代器等)
-
三元运算符(布尔表达式 ?a情况:b情况,常用在return语句中)
-
++和 - -(a++和++a的区别要熟练掌握)
-
break和continue(这部分记住一点,就是发挥作用时跳出的就是离关键词最近的一个
for
或者while
循环,在灯条和装甲板筛选的时候会经常看到它们的身影,最大的作用就是节省性能)
-
浮点误差(你可以输出
double(1)
小数后十几位试试,具体的百度吧,难兄难弟一大把) -
类型转换(用的不多,但是简单,还是有必要学一下的)
-
实参和形参(简单常用必会)
-
局部和全局(简单常用必会)
-
运算符优先级(其实多加括号可以解决这个问题,但是最好还是看看)
-
逻辑表达式(简单常用必会)
-
输入输出流(搞明白流的原理,之后常用)
-
const修饰符和#define修饰符(都可以充当自定义常量的功能,当然
const
的功能不止这些) -
函数的返回值(函数的返回值远不止
int
几个基本类型,还会返回Mat
、数组等) -
函数的参数列表(和返回值一样,也很重要,因为常用,所以要吃透)
-
函数重载(尤其是构造函数重载,用到的地方也很多)
-
数组(数组是基础班钉子户,因为这时候指针可能进来搅和了,并不容易一下完全掌握,最好在应用中学习,用到哪查到哪,因为使用率高,渐渐也就学会了,注意学一下如何把数组在各个函数中传来传去)
-
面向对象编程(这部分比较难,内容也比较多,但是成熟的视觉代码都是用面向对象写的,这里有些疑难问题可以先跳过,不要浪费过多时间,最后回头再看往往会有恍然大悟之感)
-
继承(三种继承方式、构造函数、析构函数)
-
封装(
private
、public
、protected
,公有和私有,增加代码安全性) -
多文件编程(RM视觉部分的代码量也可以算是一个小项目,我们一般创建一个工程,在工程中使用头文件和源文件配合编程)
-
模版类vector( 非常重要!非常常用!数组的替代品!)
-
指针(事故多发区!多看多学多查多总结,还是说不要浪费时间死磕,你尽管多犯错误,其他的交给时间)
-
C++的引用(这部分是重点也是难点,但是引用就是变量的别名,比传指针要简单一些,用的也比较多)
-
String类*(用的很少,但是不学这个难说学会C++了吧,算法题的瑞士军刀)
三、进阶
-
结构体(学完类学这个就简单很多,有些源代码还在用着结构体,也要学会)
-
枚举(有时会用来将装甲板和数字做一个映射)
-
如何获取系统时间?(用来测试程序耗时)
-
二维数组,vector嵌套(
vector<vector<Point2d>>
常用来表示一个点) -
异常机制(这部分关乎你写的程序的健壮性和安全性,虽然会变复杂一些,但是在一些关键部分必须上)
-
智能指针(智能指针出了作用域自动释放,你说香不香?)
-
STL模版库(都了解了解,主要用其中的
vector
) -
多线程(中级编程必学并发编程,cpu有的是力气,合理安排提高效率)
-
if define-endif用法(一般用来指定编译代码块,可以用来选择是否开启调试或者其他模式)
-
递归*(了解一下)
-
IO流*(可以用来保存珍贵的实战比赛第一视角视频,机器学习等方向也要用到读写文件)
好了,今天这篇文章就到这里啦,笔者会不定期做一些技术分享和工具使用心得,欢迎大家点赞和收藏!
参考资料:C++ Primer Plus
致谢:感谢马同学和章同学提出的见解和补充!
最后
以上就是震动早晨为你收集整理的Robomaster视觉教程(一)谈谈搞视觉应该会的C++知识一、预备二、基础三、进阶的全部内容,希望文章能够帮你解决Robomaster视觉教程(一)谈谈搞视觉应该会的C++知识一、预备二、基础三、进阶所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复