我总结了我现在完全可用的解决方案,OpenCV-Python - How to install OpenCV-Python package to Anaconda (Windows)。尽管如此,我还是将重要的部分复制并粘贴到了这篇文章中。
在撰写本文时,我使用的是 Windows 8.1、64 位机器、Anaconda/Python 2.x。 (请参阅下面的注释 - 这也适用于 Windows 10,也可能适用于 Python 3.x)。
注意 1:正如 @great_raisin(谢谢)在评论部分提到的那样,此解决方案似乎也适用于 Windows 10。
注意 2:这可能也适用于 Anaconda/Python 3.x。如果您使用的是 Windows 10 和 Anaconda/Python 3.x,并且此解决方案有效,请在下方添加评论。谢谢! (更新:从评论“Working on Windows 10”中注意到)
注意 3:根据您使用的是 Python 2.x 还是 3.x,只需在代码 sn-ps 中相应地调整 print 语句。即在 Python 3.x 中为print("hello"),在 Python 2.x 中为print "hello"。
TL;DR
要在 Anaconda(和 Spyder IDE)中完全使用 OpenCV,我们需要:
- 从the official OpenCV site下载OpenCV包
- 将
cv2.pyd 复制并粘贴到 Anaconda 站点包目录。
- 设置用户环境变量,以便 Anaconda 知道在哪里可以找到 FFMPEG 实用程序。
- 进行一些测试以确认 OpenCV 和 FFMPEG 现在可以正常工作。
(请继续阅读以了解详细说明...)
先决条件
安装 Anaconda
Anaconda 本质上是一个包装精美的 Python IDE,它附带了大量有用的软件包,例如 NumPy、Pandas、IPython Notebook 等。它似乎在科学界的任何地方都受到推荐。查看Anaconda 进行安装。
将 OpenCV-Python 安装到 Anaconda
注意:我最初尝试按照建议安装 binstar.org OpenCV 包。然而,该方法不包括 FFMPEG 编解码器 - 即您可能能够使用 OpenCV,但您将无法处理视频。
以下对我有用的说明受OpenCV YouTube video 的启发。到目前为止,我的台式机和笔记本电脑都可以使用它,包括 64 位机器和 Windows 8.1。
下载 OpenCV 包
首先,去official OpenCV site下载完整的OpenCV包。选择您喜欢的版本(2.x 或 3.x)。我使用的是 Python 2.x 和 OpenCV 3.x - 主要是因为 OpenCV-Python Tutorials 是这样设置/基于的。
就我而言,我已将包(本质上是一个文件夹)直接提取到我的 C 盘 (C:\opencv)。
复制并粘贴 cv2.pyd 文件
Anaconda Site-packages 目录(例如,在我的例子中为 C:\Users\Johnny\Anaconda\Lib\site-packages)包含您可以导入的 Python 包。我们的目标是将cv2.pyd 文件复制并粘贴到此目录(以便我们可以在Python 代码中使用import cv2。)。
为此,请复制cv2.pyd 文件...
来自这个 OpenCV 目录(开始部分在您的机器上可能略有不同)。对于 Python 3.x,我猜,只需将 2.x 相应地更改为 3.x。
# Python 2.7 and 32-bit machine:
C:\opencv\build\python\2.7\x84
# Python 2.7 and 64-bit machine:
C:\opencv\build\python\2.7\x64
到这个 Anaconda 目录(开始部分在您的机器上可能略有不同):
C:\Users\Johnny\Anaconda\Lib\site-packages
执行此步骤后,我们现在可以在 Python 代码中使用 import cv2。但是,我们仍然需要做更多的工作才能让 FFMPEG(视频编解码器)工作(使我们能够处理视频之类的事情)。
设置环境变量
右键单击“我的电脑”(或 Windows 8.1 上的“此 PC”)→ 左键单击 属性 → 左键单击“高级”选项卡 → 左键单击“环境变量.. ." 按钮。
添加一个新的用户变量以指向 OpenCV(32 位系统的 x86 或 64 位系统的 x64)。我目前使用的是 64 位机器。
| 32-bit or 64 bit machine? | Variable | Value |
|---------------------------|--------------|--------------------------------------|
| 32-bit | `OPENCV_DIR` | `C:\opencv\build\x86\vc12` |
| 64-bit | `OPENCV_DIR` | `C:\opencv\build\x64\vc12` |
将%OPENCV_DIR%\bin 附加到用户变量PATH。
例如,我的PATH 用户变量如下所示...
之前:
C:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts
之后:
C:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin
这样我们就完成了! FFMPEG 可以使用了!
测试确认
我们需要测试我们现在是否可以在 Anaconda 中执行这些操作(通过 Spyder IDE):
- 导入 OpenCV 包
- 使用 FFMPEG 实用程序(读取/写入/处理视频)
测试 1:我们可以导入 OpenCV 吗?
要确认 Anaconda 现在能够导入 OpenCV-Python 包(即cv2),请在 IPython 控制台中发出以下命令:
import cv2
print cv2.__version__
如果cv2包导入成功,没有错误,并且打印出cv2版本,那我们就万事大吉了!这是一张快照:
(来源:mathalope.co.uk)
测试 2:我们可以使用 FFMPEG 编解码器吗?
将示例input_video.mp4 视频文件放在一个目录中。我们想测试我们是否可以:
- 阅读此
.mp4 视频文件,然后
- 写出一个新的视频文件(可以是
.avi或.mp4等)
为此,我们需要有一个测试 Python 代码,称之为test.py。将其放在与示例input_video.mp4 文件相同的目录中。
这就是test.py 的样子(我在这里列出了新旧版本的代码 - 请让我们知道哪个对您有效/不适用!)。
(较新的版本...)
import cv2
cap = cv2.VideoCapture("input_video.mp4")
print cap.isOpened() # True = read video successfully. False - fail to read video.
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output_video.avi", fourcc, 20.0, (640, 360))
print out.isOpened() # True = write out video successfully. False - fail to write out video.
cap.release()
out.release()
(或旧版本...)
import cv2
cv2.VideoCapture("input_video.mp4")
print cv2.isOpened() # True = read video successfully. False - fail to read video.
fourcc = cv2.cv.CV_FOURCC(*'XVID')
out = cv2.VideoWriter("output_video.avi",fourcc, 20.0, (640,360))
print out.isOpened() # True = write out video successfully. False - fail to write out video.
cap.release()
out.release()
这个测试非常重要。如果您想处理视频文件,您需要确保 Anaconda / Spyder IDE 可以使用 FFMPEG(视频编解码器)。我花了好几天才让它工作。但我希望它会花费你更少的时间! :)
注意:使用 Anaconda Spyder IDE 时还有一个非常重要的提示。确保检查当前工作目录(CWD)!!!
结论
要在 Anaconda(和 Spyder IDE)中完全使用 OpenCV,我们需要:
- 从official OpenCV site下载OpenCV包
- 将
cv2.pyd 复制并粘贴到 Anaconda 站点包目录。
- 设置用户环境变量,以便 Anaconda 知道在哪里可以找到 FFMPEG 实用程序。
- 进行一些测试以确认 OpenCV 和 FFMPEG 现在可以正常工作。
祝你好运!