<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          計(jì)算機(jī)視覺專家:如何從C++轉(zhuǎn)Python

          共 2716字,需瀏覽 6分鐘

           ·

          2022-03-23 10:41

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)


          有人說用 Python 編程很簡(jiǎn)單,6 歲小孩都能學(xué)會(huì)。計(jì)算機(jī)視覺專家和編程語言愛好者 asya f 剛開始上手 Python 時(shí)也這么想。但門檻低就僅意味著使用簡(jiǎn)單嗎?經(jīng)常調(diào)用 API 的人是不是一定比可以從零寫出源碼的人菜?在本文中,asya f 告訴我們,從 C++轉(zhuǎn)向 Python,是一次「從個(gè)人到社區(qū)」的思維轉(zhuǎn)變。


          從 C++ 轉(zhuǎn) Python 的時(shí)候,我已經(jīng)是一個(gè)有四年全職工作經(jīng)驗(yàn)的軟件開發(fā)者了。我的工作主要是用 C++在 Linux 上編程,是 QT 庫的重度用戶。但剛開始用 Python 的時(shí)候,我卻寫得很爛。


          從 C++到 Python 的過渡已經(jīng)有了大約三年時(shí)間,我覺得是時(shí)候總結(jié)一下這段時(shí)間的經(jīng)歷了。回想起來,我改變的不只是自己所用的編程語言,還有工作方式和我對(duì)代碼的看法。


          C++和 Python 的區(qū)別此處不做贅述,網(wǎng)上可以找到很多相關(guān)信息。此處只講述我的個(gè)人經(jīng)歷。


          從 C++跳到 Python(圖源:Unsplash ;上傳者:Erik Dungan )


          C++是跳水,Python 是潛水


          C++給人的感覺就像是一頭扎進(jìn)奇幻神秘的大海里——它是如此美妙,但需要更多學(xué)習(xí)和訓(xùn)練。總的來看,你游過的水面不會(huì)很大。而 Python 有點(diǎn)像潛水——把頭伸進(jìn)水里就能看到它的美,但你不會(huì)太深入,而是在淺水里游啊游,可以輕易地游過很大一片地方。兩種語言如此不同,所以適用的場(chǎng)景也不同。


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


          C++更為嚴(yán)格,在你犯錯(cuò)的時(shí)候會(huì)更加嚴(yán)厲地懲罰你。一次都沒有收到過 Segmentation fault 的編碼會(huì)話算不上有效的編碼會(huì)話。因此,你需要更加了解計(jì)算機(jī)、編譯器和語言。如果深入下去,你會(huì)被其中蘊(yùn)含的美所打動(dòng),如編譯過程和內(nèi)存管理。


          作為一名 C++程序員,我更關(guān)心句法調(diào)整和奇怪的例子。我一直知道我是怎么分配、釋放內(nèi)存的。我寫的程序更加獨(dú)立,因?yàn)槲腋胫雷约旱拇a內(nèi)部究竟發(fā)生了什么。我主要是覺得其他人編寫的代碼不太可靠,更容易出錯(cuò),并且可能會(huì)增加內(nèi)存使用量。


          Vim、GDB 和 Valgrind 是我用到的主要日常工具*。*Vim 有很多用于編寫代碼的插件,GDB 用于 debug,Valgrind 用于分析我的內(nèi)存占用和錯(cuò)誤。我用 g++編譯,自己寫 Makefiles。那時(shí)候,我覺得 IDE 沒什么用,還會(huì)拖慢速度,讓我失去接觸代碼的機(jī)會(huì)。回想起來,我非常依賴編譯器來查找類型錯(cuò)誤。


          圖源:Unsplash;上傳者:Jakob Boman


          淺嘗 Python


          轉(zhuǎn)向 Python 時(shí),你需要學(xué)習(xí)的第一件事情就是如何放手:你不知道代碼的底層到底發(fā)生了什么,內(nèi)存被分配到哪里、釋放到哪里,但沒關(guān)系。你也會(huì)被鼓勵(lì)使用其他人寫的封裝為庫的代碼,這能幫助你節(jié)省時(shí)間,提高編碼速度。這并不意味著你需要寫慢如蝸牛并依賴于無維護(hù)和無功能的庫的代碼,其中的關(guān)鍵是很不同的。


          剛開始用 Python 寫代碼時(shí),我用 Python 寫 C++。這也行得通,但我并沒有從這門語言中獲得任何收益。當(dāng)我開始以更加 Python 式的風(fēng)格來寫代碼并使用庫以及更多高級(jí)概念(如 generators、decorators 和 contexts)時(shí),我的編程技巧才得到提升。


          作為一個(gè) Python 開發(fā)者,我傾向于首先尋找能解決眼前問題的庫。Python 擁有豐富的庫生態(tài)系統(tǒng)和社區(qū)的支持。有很多具有專門用途的庫。這些是我經(jīng)常會(huì)用到的庫:NumPy(數(shù)值計(jì)算)、OpenCV(計(jì)算機(jī)視覺)、json(閱讀 json 文件)、SciPy(科學(xué)計(jì)算)、sqlite3(數(shù)據(jù)庫)。


          我每天使用的工具是帶有 IdeaVim 插件的?PyCharm(這是一個(gè) IDE)。我開始用這個(gè)工具是因?yàn)樗且粋€(gè)很強(qiáng)大的調(diào)試器,比默認(rèn)的 Python 調(diào)試器 pdb 更加友好。我還使用了 pip 來安裝需要的庫。除非必要,我一般都不再監(jiān)控內(nèi)存使用了。


          圖源:Unsplash ;上傳者:Channey


          一些實(shí)用技巧


          如果你是一個(gè) C++開發(fā)者,并且考慮開始寫 Python,以下是我的一些建議:


          • 改掉老習(xí)慣:別再使用 C++編譯器作為調(diào)試器。不用再過度優(yōu)化內(nèi)存使用。避免寫出 C++風(fēng)格的代碼。并且無論如何,不要再依賴類型。

          • 養(yǎng)成新習(xí)慣:開始使用庫。寫 Python 式的代碼(但不要為了寫而寫),保證代碼的可讀性。嘗試使用一些更加復(fù)雜的概念,如 generators、decorators、contexts。嘗試 PyCharm。

          • 使用 C++和 Python 共用庫:一些 C++庫(如 OpenCV、QT)有 Python 接口。在 Python 中使用相同的庫會(huì)比從零開始學(xué)習(xí)一個(gè)新庫更加容易。

          • 勿忘初心:有時(shí)候 Python 實(shí)在是太慢或者不適合你的任務(wù),C++經(jīng)驗(yàn)就派上用場(chǎng)了。有很多方式(SIP、ctypes 等)可以讓你在 Python 內(nèi)使用 C++代碼。


          結(jié)語


          無論其他人說什么,切換到另一種編程語言都不容易,尤其是切換到一種與你用過的語言完全不同的語言。你要花時(shí)間去學(xué)習(xí)、挖掘、發(fā)現(xiàn)。但最重要的是,你要改變的不僅僅是語言,還有編碼風(fēng)格和工作方法。?

          -(完)-

          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特黄特色A | 欧美深夜福利 | 国产天堂色情 | 曰韩无码电影 | 亚洲成人高清 |