基於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時步驟正確,但是編譯會報錯?
