OpenCV 2.0与Python
我无法运行示例的Python程序。当我执行Python命令“from opencv import cv”时,出现了“ImportError: No module named _cv”的错误信息。在site-packages目录下有一个过时的_cv.pyd文件,但找不到任何名为_cv.py的文件。请看下面的第5步。
我的系统是MS Windows XP,使用VC++ 2008,Python 2.6,OpenCV 2.0。
以下是我所做的步骤。
- 下载并运行了OpenCV2.0的Windows安装程序。
- 下载并安装了CMake。
- 下载并安装了SWIG。
- 运行了CMake。在CMake的图形界面中取消勾选“ENABLE_OPENMP”后,我能够使用INSTALL.vcproj和BUILD_ALL.vcproj来构建OpenCV。我不太清楚这两者有什么区别,所以我在这两个项目文件下都进行了构建。C语言示例程序运行得很好。
- 将OpenCV2.0/Python2.6/lib/site-packages中的内容复制到我安装的Python2.6/lib/site-packages目录中。我注意到里面有一个旧的_cv.pyd和一个旧的libcv.dll.a。
4 个回答
正如罗杰已经解释过的,情况一度非常混乱。原因是 OpenCV 从最初的只用 C 语言实现,转变为在 OpenCV2 中同时使用 C 和 C++ 语言。这让所有的封装工具都感到头疼,包括 Python 的封装。所以请不要抱怨 Python 的开发者“总是搞坏东西”,其实他们并没有这样做。(顺便提一下,Python 里唯一一次大的不兼容是版本 2 和 3 之间的变化,这个问题早就有说明了。)
好消息是,有人正在努力通过 Boost 来解决这个混乱的局面,把 OpenCV2 封装起来。我还没有深入使用过,但现在看起来非常不错。http://code.google.com/p/pyopencv/ 目前在 Python2 中可以使用,但它已经和 Python3 兼容了 99%。
另外,保持在 StackOverflow 问题下记录你进展的做法并不好:解决问题后再回复就可以了。
你应该通过 Python 的 distutils 来安装 OpenCV。具体做法是去 OpenCV 的文件夹,然后输入:
python setup.py install
补充说明:
OpenCV 确实使用了 distutils,不过是间接的。在 UNIX 系统上,安装的方式大致是:
configure
make -j 8
make install
对于 Windows 来说,最简单的方法可能是下载安装程序,就像在 Linux 上使用包管理器安装软件一样。你不能仅仅把 OpenCV 复制到 Python 的路径里就能用,因为它依赖于一些需要编译的 C 库。
我想 Windows 的安装程序会安装好二进制文件(而不是需要你自己编译所有东西,自己编译可能会出问题)。无论如何,不要自己复制文件,要么使用 make install,要么用安装程序。
祝你在使用 OpenCV 时好运,希望你能喜欢它!
在第一步(安装程序)完成后,只需将 C:\OpenCV2.0\Python2.6\Lib\site-packages
里的内容复制到 C:\Python26\Lib\site-packages
(假设这是标准安装路径)。就这么简单。
如果你安装了摄像头,可以试试在 C:\OpenCV2.0\samples\python
里的 camshift.demo 示例。
有些过时的内容(C:\OpenCV2.0\samples\swig_python
)现在无法使用,正如上面有人提到的那样。OpenCV团队正在处理这个问题。下面是一些最新的信息:
2010年3月31日(希望如此)下一个OpenCV官方版本:2.1.0预计在2010年3月31日发布。
链接:opencv.willowgarage.com/wiki/Welcome/Introduction#Announcements2010年3月4日 [james]正在为新的Python重写示例 下午5:36
通过API 链接:twitter.com/opencvlibrary2009年12月31日 我们对OpenCV的软件工程变得更加认真。现在我们有了完整的C++和Python接口。
链接:opencv.willowgarage.com/wiki/OpenCV%20Monthly2009年9月30日 几个(实际上,大多数)基于SWIG的Python示例现在无法正常工作。原因正在调查中,OpenCV Python包的中间更新将在问题解决后尽快发布。
链接:opencv.willowgarage.com/wiki/OpenCV%20Monthly