Opencv編譯生成的so檔案及使用
Python配置opencv
原理
Python呼叫opencv的原理是:opencv編譯出共享庫檔案,python把這個共享庫檔案作為一個模組載入並使用。
通俗點就是,編譯opencv的時候開啟python介面選項,編譯好了會產生cv2.so(linux下)或者cv2.pyd(windows下)這個共享庫檔案,python程式碼中import這個cv2就可以用了。為了能正確import它,往往需要把cv2.so放在python找包能找到的路徑下,或者修改PYTHONPATH環境變數讓它包含cv2.so所在路徑。此外,python的opencv介面中,影象使用numpy陣列表示的,所以往往還需要安裝numpy、scipy、matplotlib這幾個包。
安裝
包括python和cv2.so/cv2.pyd兩方便的安裝
python
windows
windows下請用anaconda,包含了numpy等各種常見python包,非常好用。
你當然可以不用anaconda,這看起來很純粹,然而坑不少。numpy等包通過pip下載安裝的話需要額外的編譯器(天知道為啥它是用vs2008編譯的,現在都2017了喂!)
然後pip install numpy和scipy,以及matplotlib即可。
linux
linux下我也試著用過anaconda,但是覺得不合適的地方在於,平時各種開源軟體在配置PYTHONPATH等變數的時候,會比較暈,還是用apt-get裝的python更熟悉更容易掌控些。而且python包的編譯不會像windows那麼麻煩,直接pip就可以了。
sudo pip install numpy scipy matplotlib
cv2.so/cv2.pyd
windows
如果只是很簡單的使用一下opencv中最常見的功能,那麼不用自己編譯!去官網下載windows版opencv,自帶編譯好的庫檔案和可執行檔案,找到cv2.pyd,放到site-packages路徑下就可以了
如果使用了有專利保護的或者其他一些第三方功能,那麼很可能需要把opencv和opencv_contrib兩個專案一起編譯。這樣產生的cv2.pyd才是可用的。
記得把cv2.pyd放到路徑中。
linux
包管理工具預設是提供opencv的庫檔案的。比如apt或者yum、dnf去下載即可。
同樣,如果是複雜功能、有專利保護功能,就需要手動編譯。然後cv2.so放到路徑中。
懶人方式
在需要用cv2模組的程式碼目錄中,把cv2.so拷貝過去。因為import包的時候會在當前路徑下找包的!
若電腦中同時存在opencv3和opencv2版本,需要在PYTHONPATH中新增cv2.so檔案所在的路徑,比如/usr/opencv-2.4.13.4/build/lib,在lib路徑下有cv2.so檔案