Python調用opencv的原理是:opencv編譯出共享庫文件,python把這個共享庫文件做爲一個模塊加載並使用。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這幾個包。linux
包括python和cv2.so/cv2.pyd兩方便的安裝windows
windows
windows下請用anaconda,包含了numpy等各類常見python包,很是好用。數組
你固然能夠不用anaconda,這看起來很純粹,然而坑很多。numpy等包經過pip下載安裝的話須要額外的編譯器(天知道爲啥它是用vs2008編譯的,如今都2017了喂!)eclipse
若是執意要安裝,那麼須要vc的編譯器,下載:http://www.microsoft.com/en-us/download/details.aspx?id=44266函數
而後pip install numpy和scipy,以及matplotlib便可。工具
linux
linux下我也試着用過anaconda,可是以爲不合適的地方在於,平時各類開源軟件在配置PYTHONPATH等變量的時候,會比較暈,仍是用apt-get裝的python更熟悉更容易掌控些。並且python包的編譯不會像windows那麼麻煩,直接pip就能夠了。命令行
sudo pip install numpy scipy matplotlib
windows
若是隻是很簡單的使用一下opencv中最多見的功能,那麼不用本身編譯!去官網下載windows版opencv,自帶編譯好的庫文件和可執行文件,找到cv2.pyd,放到site-packages路徑下就能夠了code
若是使用了有專利保護的或者其餘一些第三方功能,那麼極可能須要把opencv和opencv_contrib
兩個項目一塊兒編譯。這樣產生的cv2.pyd纔是可用的。接口
記得把cv2.pyd放到路徑中。
linux
包管理工具默認是提供opencv的庫文件的。好比apt或者yum、dnf去下載便可。
一樣,若是是複雜功能、有專利保護功能,就須要手動編譯。而後cv2.so放到路徑中。
在須要用cv2模塊的代碼目錄中,把cv2.so拷貝過去。由於import包的時候會在當前路徑下找包的!
python調用opencv,是讓python調用opencv的DLL文件cv2.pyd。不過直接從官網下載的opencv3.0rc1壓縮包中python的cv2.pyd文件,使用起來仍是有問題,SIFT,SURF等函數不能使用。
解決方法是安裝一個非官方的wheel包,到這裏下載:http://www.lfd.uci.edu/~gohlke/pythonlibs/
而後用pip安裝這個opencv的wheel包。
2015年7月10日 10:34:11
如今opencv3.0rc1已經出來了,3.0代碼中的python例程,要用3.0壓縮包中帶的cv2.pyd
而前面提到的SIFT、SURF函數沒法調用,採用「安裝一個非官方的wheel」包,目前下載到的是opencv-2.4.11版本的,裝好它以後,opencv-3.0rc1裏面的python例程中,houghcircles.py等代碼跑不起來。畢竟版本不同,有區別。
而我同時但願在eclipse+pydev的環境下寫寫SIFT、SURF的調用代碼,這就須要繼續配置:配置系統變量PYTHONPATH,它指明瞭命令行下python調用的DLL路徑。好比個人:
%Python%\Lib;%Python%\DLLs;%Python%\Lib\lib-tk;%Python%\my_dlls;
其中,my_dlls是我新建的目錄,把opencv-3.0rc1提供的cv2.pyd放到此目錄下。
這樣,雙擊opencv-3.0rc1中的python代碼,就能運行了。
而在eclipse中,對python interpreter的autoconfig,默認狀況下不會添加my_dlls目錄,就能夠放心使用SIFT、SURF了。固然若是這時候須要在eclipse中運行opencv-3.0rc1的python例程代碼,就須要添加my_dlls路徑;在終端下運行調用SIFT、SURF函數的代碼,就須要把PYTHONPATH中的my_dlls目錄去除。沒辦法,python+opencv還不夠成熟,只好用這種土鱉方法了。