opencv庫的python版為啥比c++版小這麼多?是功能有區別嗎?
這是python
這是c++的
opencv_world300.dll 和 opencv_world300.lib 對應的是 cv2.pyd,是動態鏈接的庫,通常你用的就是這兩個文件。
staticlib 文件夾下的是靜態鏈接的庫,通常用不到。
opencv_world300.dll 這個文件是 OpenCV 3.0 之後才有的,之前每個模塊都是獨立一個 dll。兩種方法各有優缺點,之前的更加靈活,現在的發布更加方便。
可能是python的opencv中很多基本的操作(比如矩陣運算)都是依賴numpy等庫,不需要在cv2中實現。
而c++中的可能很多基礎操作都自己實現了吧,同時c++的opencv中好像還兼容了第一版以及c風格的函數(好久沒用記不清了),以及還有很多dll什麼的,可能因為這個原因比python的大吧。
以上僅為個人猜測╮(╯▽╰)╭能想到的合理的解釋只有,你必須先有opencv的C++版本,然後opencv的python版本才能運行。
雖然是個老帖,但進入時間線了就回答一下吧。
首先,直接看你的圖:
bin(75M), lib(21.3M), staticlib(400M)
其中,所有這些東西都有 debug 和 release 兩個版本(XXXd.dll 和 xxx.dll),其中 debug 一般是release的好幾倍。 staticlib 裡面又含有 jpg/png/ipp/tbb 這些三方庫文件,含包含 pdb 程序調試資料庫文件。動態庫是bin目錄下的dll,可以看到就不包含那些雜七雜八的東西了,因為已經鏈接到 DLL中了。
如果真正要比較,其實應該比較的是Python的 cv2.pyd 和 C++的Release版動態庫 (opencv_word.dll + opencv_word.lib 這兩個C++庫文件 。這兩個文件是 OpenCV C++ 庫編譯成全功能單個文件。這樣比較分別是 26.8M 和 (26.4M + 1.6M) ,也就是基本上差不多一樣大啦。
哦,重點是,Python介面中,OpenCV 的核心 API 基本都有。只不過有些介面在 python numpy.ndarray 中太容易實現(或者沒必要實現)或者其他原因,就沒有編譯到 cv2.pyd中。
但是,大體上(如95% ?) 是一致的。
最後,歡迎參觀 Python OpenCV 圖像處理 專欄。
一開始我也是這麼覺得的,Python版的庫這麼小,用起來更方便,後來用的時候才發現,其實很多複雜一點的函數,新的圖像視頻方法,其實Python版還沒有實現,但是C++版應該是優先開發,所以都比較全。
再者C++的庫分debug和release,相當於是兩個庫,而且為了配合VS的使用,其中肯定包含了很多其他參數。而Python就只有一個庫。C++那個是源代碼吧………純文本散文件佔用的空間要比文件本身的總體積大很多(用zip壓縮一下看看)。
推薦閱讀:
※如何用 Python 中的 NLTK 對中文進行分析和處理?
※用python去搞數學建模可行性大不大?
※python生成器到底有什麼優點?
※金融工程現在用python多嗎?
※dlib人臉識別 模塊 如何 在Python 中安裝?