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了喂!)
如果執意要安裝,那么需要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
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包的時候會在當前路徑下找包的!
以下是原文
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包。
opencv版本的選取
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還不夠成熟,只好用這種土鱉方法了。
文章列表