基於C++的open cv 和 基於 Python 的open cv 分別能實現什麼功能?有什麼區別?

如題


這個問題很簡單,打開opencv doc,查看有哪些API和使用說明(裡面已經陳述了是否有C++介面和Python介面)

下面舉個栗子:

打開Feature Detection and Description,選擇ORB演算法

向下滑動網頁,可以看到ORB對象crearte時,有C++和Python兩種介面。

所以要根據你的需求,去選擇在哪種語言下完成,如做深度學習,如果用到OpenCV,那肯定是Python版,如果是做實際應用項目,要求速度快,當然用C++版本更合適。

這裡要畫個重點!

打開CUDA版本的Feature Detection and Description,選擇cuda::ORB

可見網頁中,並沒有Python版本了

你以為就CUDA相關的函數不支持Python么?

我們再看看:

打開最新的FacemarkLBF,你就可以看到Python那一欄也是空的

------我是分割線-------

一般來說,API層面上,C++ &> Python

但最終要根據需求來選擇......給OpenCV點個贊


類似於燃氣(python)和蜂窩煤(c++)都可以用來做飯,燃氣用起來更方便,蜂窩煤麻煩點。

opencv是用C/C++實現的圖像演算法庫,Python可以調用其介面,底層是一樣的。


Compared to languages like C/C++, Python is slower. That said, Python can be easily extended with C/C++, which allows us to write computationally intensive code in C/C++ and create Python wrappers that can be used as Python modules. This gives us two advantages: first, the code is as fast as the original C/C++ code (since it is the actual C++ code working in background) and second, it easier to code in Python than C/C++. OpenCV-Python is a Python wrapper for the original OpenCV C++ implementation.

摘自官方文檔,重點加粗。

個人理解上來說,Python的OpenCV只是wrapper,也就是說把Python內使用的數據(這一段下面特別指出了要用numpy),轉換成可以給C/C++函數當參數用的格式,然後調用C/C++的庫,最後把返回值轉換成Python可以處理的格式。

如果只是做了wrapper,沒有做更多,那麼Python的版本可以有的功能就小於等於C/C++的版本。我用得不是很多,沒怎麼用到過Python這邊有但是C/C++那邊沒有的東西。

wrapper算是Python內嵌其他語言的方案之一,理論上各種庫都可以寫wrapper。當然實踐上熱門領域也不是很多,再加上C++的一些特性沒法通過wrapper完美使用(比如template),很多庫只有多個比較簡陋的民間版本,像OpenCV這樣有一個比較完整的官方版wrapper的就相對比較少了。


推薦閱讀:

OpenCV檢測篇(一)——貓臉檢測
OpenCV3.3.0在Visual Studio 2017上的配置
每天一練P1 Python和OpenCV做圖像處理(imread)
機器視覺領域,實驗台的簡便性,對機器視覺方案的產出也有很大影響
為什麼Visual Studio2015配置OpenCV2.4.9時步驟正確,但是編譯會報錯?

TAG:編程語言 | Python | OpenCV | 計算機視覺 | CC |