opencv在CV, ML, DIP等領域處於什麼地位?

在工業界和學術界,opencv在計算機視覺,機器學習/模式識別,圖像處理等領域處於何種地位?


硬體廠商重要的跑分工具,廣大大學生畢業的好幫手,CV創業必備的軟體庫


最快(之一)最好用的矩陣運算庫+最順手最全的常用圖像處理演算法庫+功能齊全且夠用的ml演算法庫+方便使用的cuda

而且依託於c++天生的高性能和python的易用性,已經成為工業界事實的標準以及在學術界Matlab最致命的競爭對手。

--

樓下匿名用戶說的,「自動化所模式識別的博士們:你做的太爛了,跟opencv一個水平。」opencv里實現的都是經典的圖像處理演算法,有相當一部分是八九十年代就發出來的paper。這個博士嘲笑的是,你做出來的research居然又把古人的輪子重造了一遍,連opencv都實現過一遍了。如果這個博士真的是嘲笑opencv本身項目的代碼質量的話,喝喝,那我對自動化所又有了新的認識……


OpenCV通常是做原型開發的一個工具。大部分時候只是用來做Image/Video IO, Image Processing. 在圖像處理方面OpenCV還是做得很好的,這得益於早期C版本的鋪墊。OpenCV的一些Vision相關的高級演算法實現基本都不是最好的,也就是說你都可以找到更好的實現,比如決策樹,比如svm,比如攝像頭標定……等等。

我盤裡面現在還有最早的OpenCV的源代碼。

那個時候OpenCV還是純C寫的,沒事的時候就看OpenCV源代碼學習圖像處理演算法。

OpenCV早期的C版本是寫得我認為很好的。到了2.x,主要都是C++了,整體質量感覺下降了很多。

我工作之餘寫代碼還是會用OpenCV的IO層代碼,確實方便。真正做項目的時候,有時候連顏色空間轉換,resize這樣的功能都需要自己手寫或者定製。

我覺得OpenCV現在並不是一個適用於產品開發的庫。質量比較高的庫,比如VLFeat,比如Leptonica,這些庫都十分清晰容易讀。結構和邏輯都清晰一些。

因為OpenCV的關注度高,每年會有很多新的演算法加進去,這可能是我現在唯一關注OpenCV的原因了。


其實不能說什麼地位,基本就是工具,而且CV業界中被使用最多的工具之一,使用得多不一定是他有多好,而是他的功能足夠豐富和強大,加上開發維護的人員都不少,所以能保證一定的可靠性。

因為很多基礎的演算法都封裝成了函數的形式,所以確實適合快速做演算法驗證和測試,但是如果要用在實際應用中,還是有很多可以優化和調整地方。

因為傳統穩定的演算法現在並沒有太多的更新,所以opencv的開發開始走向更多的功能性,例如移植到移動設備上,做GPU函數介面等等。

OpenCV裡面機器學習的庫其實並不是很強大,所以如果真的要做圖片的機器學習,一般不會直用OpenCV的ml庫。

在Deep Learning方面,DL在CV中的地位眾所周知,但是OpenCV在DL方面的顯然追不上其他的DL工具,例如Caffe, 但是在一個應用中,結合OpenCV和其他DL工具一起使用,也是常用的方式。

現在用得最多的OpenCV模塊其實就是core,imgproc,imgcodecs,highgui,videoio這幾個,而個人最欣賞的還是Mat的這個類的設計,這個類誕生於OpenCV2.x,貫穿整個OpenCV乃至今後的發展,在圖形演算法中,即使大家不用OpenCV的函數介面,還是應該會沿用他的IO模塊和Mat數據結構的。

最後,必須吐槽,因為OpenCV越來越臃腫,所以在國內下載真的是越拉越麻煩。

最後順一則廣播:

我司組織了一個計算機視覺的開發者交流微信群,目標是彙集【計算機視覺,圖像處理,3D圖像,視頻處理,深度學習,機器學習】的開發者,一起分享開發經驗,共同探討技術,有興趣入群的可以加我微信(WeChat: LaurenLuoYun,二維碼如下),請註明「姓名-公司/學校-技術方向-加群」(純交流的無需添加「加群」),謝謝。


在Vision方面,想快速試驗新演算法真的很麻煩!比如我看的論文裡面很少用C寫的,OpenCV基礎上的代碼。可能因為研究人員時間比較多,寧願自己寫也不願意學OpenCV。

OpenCV學習曲線有些陡峭。我覺得第三方的尤其煩,很多文檔不完善,更新也跟其他開源項目比比較慢,可靠性不是很高。不懂C的連package都裝不上去 因為直接用pip不夠(跟各種其他庫的更新不相容),文檔又欠缺。現在很多學數學或者物理或者工程的研究人員寧願自己寫openCV的基本功能,因為不願意兼職做dev ops跟OpenCV打交道。

對這些人,我很難說OpenCV好用。他們要是用OpenCV就會很慢,著急的時候寧願用MATLAB,看得我很頭疼,跑也跑不完。。。

我用過OpenCV的python package跟iOS package,最後真的圖像處理部分幾乎都是我重新寫的,有些還很慢,只是用了些不痛不癢的功能,比如I/O跟基本的矩陣變換處理視頻。這些不痛不癢的功能,Objective C跟python都有更native,整合更好的解決方案(儘管有些是在OpenCV基礎上寫的,但是程序員不需要直接跟OpenCV打交道)。有時候就是想神速地弄出一些新的、複雜的演算法的prototype,用OpenCV還要跟其class打交道,煩,沒耐心。


贊同立黨的說法,然後補充一下。opencv是越來越強大了,各種平台的支持也比較多了,就演算法而言,種類足夠多,但是就實用性來說,比起商業演算法庫差的多,在機器視覺領域,想用opencv做東西要做大量的另外的演算法來補充,比如定位,亞像素。在cv領域我想也差不多是這樣吧。然後在演算法優化方面確實有點厲害了,可以看看源碼里,sse和avx優化都有,簡單的演算法速度還可以,稍微複雜點的速度差距就挺大。這點比起商業演算法庫的話差自動多線程並行,多核並行,和自動的內存管理。在機器學習方面的話不太熟悉,但是據說以前鐵道上的檢測就是拿opencv里的各種特徵加svm做的,當然現在很多人都去搞caffe了。在很多細分的方向上都干不過商業演算法庫,但是opencv已經很優秀了,有太多論文源碼都是基於opencv的,感謝intel吧!


3年前用OPENCV的模板匹配庫做了個非常酷的應用


每次用opencv都只用一些io,圖像處理之類的,其他的基本上不看,裡面有最新的演算法啥的其實沒法直接用於工程啊,還是得自己寫,不過可以參考下


opencv的基礎模塊,比如core、imgproc還是不錯的工具,但不一定對特定功能最好,高級一點的應用模塊性能和精度都不咋滴。個人感覺,勿噴。


cv方面感覺工業屆用的opencv比較多吧,學術界用matlab比較多


推薦閱讀:

如何評價"世界首台超越早期經典計算機的光量子計算機在我國誕生"?
李沐的機器學習水平怎麼樣?
學計算機,是保研去北航好還是北郵好?
為什麼沒有集中式拒絕服務攻擊?
OCP培訓的老師說在北上廣不會linux就意味著失業?

TAG:圖像處理 | 機器學習 | 計算機科學 | OpenCV | 計算機視覺 |