赞
踩
自己之前就想学习c++,也都把《c++ primer plus(第六版)》看了3遍左右,每一遍都把代码抄写一次。目前基本的也都大概了解,起码知道怎么写的。这肯定是皮毛。
后来还买了《cuda c编程权威指南》、《数据结构、算法与应用c++语言描述》、《c++程序设计语言(第1~3部分)》、《算法导论》。这些书,都没怎么看完。也就是把《数据结构、算法与应用c++语言描述》的前7章对着书把代码抄写了一遍,大概理解了数据是怎么处理的,如何将算法转换成代码的。
但是我看不下去了,对于初学者来说,实在是太枯燥了,而且树上的代码还不完整,代码写出来容易报错,成就感低。
回想之前我学习R语言,都是在咸鱼上帮人做项目,帮人解决小问题,一点一点积累才成长起来的。前期虽然看了R的很多书,但是大部分书里面的内容都是没什么用的。最有用的竟然是google和stack overflow。后来我又继续自学了python,在反复看了基本基础的书之后,也是不断的尝试把之前R的项目用python来实现,有新的需求也都是使用python,用python不断的来整活,渐渐的python能力也是不断的在提高。
而今天,我作为C++初学者,也是遇到相同的问题,在有一点点基础上,如何有效的提高我的C++能力?我想还是整活!!
确定了使用C++整活,那么做一个什么样子的小项目呢?
我感觉第一点是项目特点是要能看得见:所见即所得,就像是之前入门R的时候,做的都是可视化的东西,马上出结果,让人非常有成就感。也就是渐渐的在了解ggplot2之后,不断的了解数据可视化的本质是数据处理,也渐渐的了解了如何使用R处理数据的一些方法。后来我在学习python的时候,也是这样,去做一些可视化,数据处理内容,不断的就提高了python能力。后来我使用python做了一个隔空输入的东西,是基于mediapipe和opencv的。
刚好后来我在B站上看到好多人都在学如何使用yolov5做物体检测,因为这个小项目我使用python肯定可以做的出来了,而且还比较熟悉python版本的opencv、python的数据处理矩阵方法(图像说白了,就是矩阵呗),而且opencv的python版本和c++版本都差不多。因此决定使用C++做一个物体检测。
让直接写C++代码实现,肯定是不可能的,我肯定抄!先把别人的代码都跑通了再说。
于是我找到一个比较好的仓库(https://github.com/hpc203/yolov5-dnn-cpp-python),这个仓库代码我看500行代码不到。内容也还不错。
不是简单的无脑的抄,在抄写的时候,注意作者是怎么实现的、怎么封装数据流的,怎么把各个模块打包的。当然如果遇到真的不懂的,也不一定非要就去停下来思考,坚持抄写完成,然后可以运行起来,如果遇到不懂的,在后面调试的过程中,看看数据流是怎么样变化的。
其实啊,感觉和我之前使用python做的隔空输入的代码差不多。代码结构主要是:
在这个代码框架上,很容易把这个仓库的代码看懂。
另外,还要注意细节,比如作者是怎么给检测到对象的,怎么加载模型的等等。可以明显的感受到,在c++里面,非常喜欢使用类来处理数据,其实我觉得如果对python的类都比较理解的话,c++入门也没有那么难。
中间遇到一些问题:
【代码截图】
【效果展示】
我后来还把这个目标检测从静态图片换成了实时的版本(虽然真的很简单,但是起码有意思,哈哈哈哈)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。