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还不够成熟,只好用这种土鳖方法了。