計算機視覺一般都用什麼語言實現?有什麼好的平台?
01-03
計算機視覺工程上一般還是用c/c++的多一些,可以用opencv,有很多現成的演算法可以用。此外,學術圈裡,matlab也是一個常用工具,matlab的特點是易上手,實現演算法很方便,也有很多共享的代碼可以用。
第一次受邀回答問題,非常感謝!同意鄧亞峰同學的答案。再簡單補充幾點:
- 一般的開發步驟是:先Matlab或OpenCV等平台上快速實現核心演算法(因為很多介面功能和基礎演算法都有現成函數可調用,又有可視化界面,所有實現速度較快)。如果效果不錯,就把涉及到的所有函數功能根據項目要求用c/c++重新編程實現。
- 補充幾本OpenCV和Matlab上實現計算機視覺演算法的參考資料:
- 《Digital Image Processing》(3rd Edition)+《Digital Image Processing Using Matlab》(2nd Edition)
- 《Learning OpenCV: Computer Vision with the OpenCV Library》
作為曾經參與過CV學術研究的人表示,學術圈裡面基本matlab就足夠了,偶爾會用用C++.
順便推薦兩本學術圈裡面最常用的教科書:
《Computer Vision: A Modern Approach》《Multiple View Geometry in Computer Vision》演算法學習:
1. 如果會C++,建議CC++ OpenCV模式,因為絕部分及時間視覺演算法還是要跟同行比較運行速度的,雖然評價一個演算法並不看語言,但是在計算機視覺領域比較速度的方式很多時候還是看時間。另外CC++ OpenCV的模式很容易能夠將你的實驗性質的代碼向工程實際應用的代碼(保持高的運行效率)轉換。這一點是Matlab、Python所沒有的(這個是個人觀點,求討論)。2. 如果沒有C++基礎,那麼從Python OpenCV開始,OpenCV很早就已經支持Python語言,另外Python的易用性也和Maltab不相上下,運行效率沒有CC++那麼高,但是Python調用CC++比較方便,提高運行效率還是有路子的。3. 個人(狂妄地)不建議Matlab,雖然現在大街小巷都在用,(1)如果用,請盡量購買版權。(2)隨著Python在計算機視覺方面的代碼不斷積累,Matlab的易用性豐富的庫函數的優勢已經在減弱。(3)另外Matlab的代碼日後要轉換成(高效率的)工程代碼是很困難的,你幾乎要重寫整個演算法。
商用:如果題主編寫的軟體要快速商業運用,那麼可以參考德國MvTec公司的Halcon軟體,以及美國的Vision Pro軟體(具體公司名記不清了),這些軟體提供的庫函數、可視化設計、文檔說明都要遠遠好過開源的OpenCV或者是Matlab關於視覺的庫函數。只不過費用較高,開發版一般10w以內,運行版一台機器大概2W。——————另外推薦一個非常棒的中文CV論壇,在那裡你可以學到很多東西。http://www.cvchina.net我是這樣的:有一個想法了就會用matlab快速實現,但由於matlab效率太低了,所以會把瓶頸函數用MEX C/C++ 寫出來。Python也是一個非常好的快速實現的工具,而且社區裡面也有很多Python的共享代碼,有一本書叫做用python做科學計算,作者在網上發布了PDF版本。
語言:
C/C++ CUDA MATLAB Python
平台: C/C++: CUDA Platform, PCL, OpenNI, PCL, Micorsoft SDK(Kinect), OpenGL MATLAB: MATLAB ToolBox Python: 本人用的不多,感覺比較散 (望補充)你好,我們組做這個的時候基本上都是先採用matlab模擬演算法,先驗證演算法可行性,呆模擬完成後,再在VC平台上結合OPENCV來轉移到具體項目,用到圖像卡時也是在VC環境下應用opengl做的。其他語言我接觸不錯。謝謝……
可以看看微軟研究院的項目http://Infer.Net,如果你考慮在.Net上實現的話。當然現在這還是beta階段,不過也算是提供一種思路。據稱Kinect的一部分功能是使用這個實現的。
受邀,感謝!
由於自己並不是做CV的,但是組裡有人做,所以還是可以回答的。
補充一下其他答案中沒有提到的Python,Python可以快速的實現演算法,而且社區中大量的package可以利用。Python還有一個優勢在於可以和其他各種語言結合進行混合編程,至於速度上來說雖然沒有C/C++快,但是現在PyPy已經非常棒了,如果是做科研的話,對速度不是那麼追求,完全可以考慮Python。建議matlab/python 快速做demo試錯驗證,線上環境必須 C/C++,當然如果你不怕費錢用機器堆速度的話當我沒說。opencv必須掌握,dlib也可以看看,做精緻一點SSE什麼的也要會一點。GPU編程的話就CUDA。線上做圖像的深度學習平台的話還是推薦Caffe
開玩笑的答案:
不管黑貓白貓,管用就是好貓。實際上:
不用Matlab,你就輸在起跑線上了。原因無他,你建個演算法原型就比人浪費時間。
本質上就是一個研究效率和時間效率的問題。無論學校小組是否都用Matlab實現,要出去工作的話,我經歷過兩個公司,
只會用Matlab會被鄙視,必須會C++,僅供參考
我們公司用C,每個演算法都有統一的介面規範!便於移植到前端設備上!模塊內部都是標準c,做這個方向最好是自己積累一套自己的基礎庫!
個人認為如果你只是想搞演算法研究就用matlab,這樣模擬起來相對容易很多,對理論研究的經歷也會增加,不會花費大量時間到編程上來,如果做工程的話可以用C++和Opencv,不但要演算法正確實現的過程的邏輯結構同樣重要
python實現起來巨慢,真是個沒辦法的缺點,但是優點是有很多開源的演算法平台可用。
opencv是一個古老的庫了,非常全面,適用於研究也適用於產品化,matlab適用於研究離產品化比較遠。最近高通出的fastcv也是一個不錯的庫。
推薦閱讀:
※圖像超解析度就業前景如何?
※計算機視覺的前沿理論有哪些?
※有哪些有趣的圖形學(CG)和計算機視覺(CV)相結合的應用的例子?
※計算機視覺中,目前有哪些成熟的匹配定位演算法?
※人工智慧未來會最先在哪個領域實現應用?