点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者|asya f

本文转自|转载机器之心

有人说用 Python 编程很简单,6 岁小孩都能学会。计算机视觉专家和编程语言爱好者 asya f 刚开始上手 Python 时也这么想。但门槛低就仅意味着使用简单吗?经常调用 API 的人是不是一定比可以从零写出源码的人菜?在本文中,asya f 告诉我们,从 C++转向 Python,是一次「从个人到社区」的思维转变。

从 C++ 转 Python 的时候,我已经是一个有四年全职工作经验的软件开发者了。我的工作主要是用 C++在 Linux 上编程,是 QT 库的重度用户。但刚开始用 Python 的时候,我却写得很烂。

从 C++到 Python 的过渡已经有了大约三年时间,我觉得是时候总结一下这段时间的经历了。回想起来,我改变的不只是自己所用的编程语言,还有工作方式和我对代码的看法。

C++和 Python 的区别此处不做赘述,网上可以找到很多相关信息。此处只讲述我的个人经历。

从 C++跳到 Python(图源:Unsplash ;上传者:Erik Dungan )

C++是跳水,Python 是潜水

C++给人的感觉就像是一头扎进奇幻神秘的大海里——它是如此美妙,但需要更多学习和训练。总的来看,你游过的水面不会很大。而 Python 有点像潜水——把头伸进水里就能看到它的美,但你不会太深入,而是在浅水里游啊游,可以轻易地游过很大一片地方。两种语言如此不同,所以适用的场景也不同。

深入 C++并努力成为幸存者

C++更为严格,在你犯错的时候会更加严厉地惩罚你。一次都没有收到过 Segmentation fault 的编码会话算不上有效的编码会话。因此,你需要更加了解计算机、编译器和语言。如果深入下去,你会被其中蕴含的美所打动,如编译过程和内存管理。

作为一名 C++程序员,我更关心句法调整和奇怪的例子。我一直知道我是怎么分配、释放内存的。我写的程序更加独立,因为我更想知道自己的代码内部究竟发生了什么。我主要是觉得其他人编写的代码不太可靠,更容易出错,并且可能会增加内存使用量。

Vim、GDB 和 Valgrind 是我用到的主要日常工具*。*Vim 有很多用于编写代码的插件,GDB 用于 debug,Valgrind 用于分析我的内存占用和错误。我用 g++编译,自己写 Makefiles。那时候,我觉得 IDE 没什么用,还会拖慢速度,让我失去接触代码的机会。回想起来,我非常依赖编译器来查找类型错误。

图源:Unsplash;上传者:Jakob Boman

浅尝 Python

转向 Python 时,你需要学习的第一件事情就是如何放手:你不知道代码的底层到底发生了什么,内存被分配到哪里、释放到哪里,但没关系。你也会被鼓励使用其他人写的封装为库的代码,这能帮助你节省时间,提高编码速度。这并不意味着你需要写慢如蜗牛并依赖于无维护和无功能的库的代码,其中的关键是很不同的。

刚开始用 Python 写代码时,我用 Python 写 C++。这也行得通,但我并没有从这门语言中获得任何收益。当我开始以更加 Python 式的风格来写代码并使用库以及更多高级概念(如 generators、decorators 和 contexts)时,我的编程技巧才得到提升。

作为一个 Python 开发者,我倾向于首先寻找能解决眼前问题的库。Python 拥有丰富的库生态系统和社区的支持。有很多具有专门用途的库。这些是我经常会用到的库:NumPy(数值计算)、OpenCV(计算机视觉)、json(阅读 json 文件)、SciPy(科学计算)、sqlite3(数据库)。

我每天使用的工具是带有 IdeaVim 插件的 PyCharm(这是一个 IDE)。我开始用这个工具是因为它是一个很强大的调试器,比默认的 Python 调试器 pdb 更加友好。我还使用了 pip 来安装需要的库。除非必要,我一般都不再监控内存使用了。

图源:Unsplash ;上传者:Channey

一些实用技巧

如果你是一个 C++开发者,并且考虑开始写 Python,以下是我的一些建议:

  • 改掉老习惯:别再使用 C++编译器作为调试器。不用再过度优化内存使用。避免写出 C++风格的代码。并且无论如何,不要再依赖类型。

  • 养成新习惯:开始使用库。写 Python 式的代码(但不要为了写而写),保证代码的可读性。尝试使用一些更加复杂的概念,如 generators、decorators、contexts。尝试 PyCharm。

  • 使用 C++和 Python 共用库:一些 C++库(如 OpenCV、QT)有 Python 接口。在 Python 中使用相同的库会比从零开始学习一个新库更加容易。

  • 勿忘初心:有时候 Python 实在是太慢或者不适合你的任务,C++经验就派上用场了。有很多方式(SIP、ctypes 等)可以让你在 Python 内使用 C++代码。

结语

无论其他人说什么,切换到另一种编程语言都不容易,尤其是切换到一种与你用过的语言完全不同的语言。你要花时间去学习、挖掘、发现。但最重要的是,你要改变的不仅仅是语言,还有编码风格和工作方法。

-(完)-

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

计算机视觉专家:如何从C++转Python相关推荐

  1. 苹果地图副总裁_挖角苹果高级计算机视觉专家 Mapillary地图更新添一员大将

    盖世汽车讯 据外媒报道,当地时间7月11日,总部位于瑞典的地图初创公司Mapillary宣布,其已经从苹果公司挖角了一位高级计算机视觉专家. Mapillary公司表示,Till Quack原来是苹果 ...

  2. 年薪百万的阿里P9 Python专家快速带你入门Python

    年薪百万的阿里P9 Python专家快速带你入门Python 本文的目的是尽可能地用简洁的语言介绍 Python 编程语言,以帮助初学者能够快速入门Python.下面,让我们开始吧 什么是 Pytho ...

  3. 不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?

    作者 | Lazar Gugleta 译者 | Arvin,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 计算机视觉和计算机图形学现在非常流行,因 ...

  4. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

  5. imread函数_不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?

    作者 | Lazar Gugleta译者 | Arvin,责编 | 夕颜头图 | CSDN付费下载自视觉中国出品 | CSDN(ID:CSDNnews)计算机视觉和计算机图形学现在非常流行,因为它们与 ...

  6. 2021 编程语言排行榜出炉!华为专家带你一起学 Python!

    新年将至,正是重新再出发的好时候. 如果要学一门新的编程语言,该从哪个开始入手呢? 不如来看下编程语言风向标:2021 年编程语言排行榜! 近日,IEEE Spectrum 发布的 2021 年度编程 ...

  7. python是动态类型语言、变量不需要显示声明类型_【IT专家】第3章 Python基础

    第 3 章 Python 基础 2017/12/13 0 3-1 .标识符.为什么 python 中不需要变量名和变量类型声明? python 语言是动态的.强类型语言,一言以蔽之! 动态编译语言特点 ...

  8. 五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 原文地址:http://click.aliyun.com/m/43988/ 1.Python网络编程框架Twi ...

  9. python和lisp学哪个好_五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 1.Python网络编程框架Twisted的创始人Glyph Lefkowitz(glyph): 编程是一项社 ...

最新文章

  1. linux下boost的一个扩展线程池-threadpool-的学习
  2. 数据库:MySQL 团队开发规范,太详细了,建议收藏!
  3. [设计模式-结构型]享元模式(Flyweight )
  4. mysql集群 hbase_hbase完整分布式集群搭建
  5. html自动计算时间代码,原生JavaScript实现日期计算器功能
  6. rbf神经网络和bp神经网络,rbf神经网络百度百科
  7. 数据结构:图(Graph)【详解】
  8. 软件测试笔记——如何测试一个矿泉水瓶?
  9. 10.12 SNK中国 游戏客户端 二面40min
  10. 山西台达plc可编程控制器_PLC可编程控制器常见的应用领域
  11. Android 双RecyclerView嵌套实现购物车逻辑
  12. Hausdorff 距离
  13. Vue的生命周期钩子函数之activated
  14. Python之Turtle库绘制简单图形
  15. Dva 的connect使用
  16. ANSI标准判断sql空值与去空去空格
  17. 得到app文稿导出_得到app的文稿怎么下载复制导出
  18. 【图片编辑小软件, 在线文件转换器】FastStone Photo Resizer支持批量转换和批量重命名;免费快速在线转换器, 将pdf, 图像, 视频, 文档, 音频, 电子书及压缩等格式相互转换
  19. Python:1020 月饼
  20. win10安装motionbuilder失败,怎么强力卸载删除注册表并重新安装

热门文章

  1. 恶犬秒变萌汪:东京大学开源“治愈系”GAN图片拼贴工具 | 技术头条
  2. AI一分钟|美团确认收购摩拜;特斯拉今年第一季度产量创历史新高
  3. 如何使用 Arthas 定位 Spring Boot 接口超时 ?
  4. 兰大本科生发31篇论文遭质疑,本人及校方回应!
  5. Science首发奥密克戎突刺蛋白分子水平分析,揭秘2大传染性增强原因,柳叶刀:全球大流行有望3月结束...
  6. 手把手教你如何做建模竞赛(baseline代码讲解)
  7. 我被编程语言PUA了!
  8. 我不是人:一年发论文180篇,横跨多个学科领域,收获99次引用
  9. 【干货】CNN与Transformer的强强联合!谷歌最新开源BoTNet,ImageNet达84.7%准确率
  10. 他智商167,超过爱因斯坦,花17年炸遍美国高校,却因一疏漏被捕