文章出處

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還不夠成熟,只好用這種土鱉方法了。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()