標籤:

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 中安裝?

TAG:Python | C | OpenCV |