我总结了我现在完全可用的解决方案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,只需print
在代码片段中相应地调整语句即可。即在 Python 3.x 中它会是print("hello")
,而在 Python 2.x 中它会是print "hello"
.
TL;博士
要在 Anaconda(和 Spyder IDE)中完全使用 OpenCV,我们需要:
- 从 OpenCV官方站点下载 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 视频的启发。到目前为止,我已经让它在我的台式机和笔记本电脑上运行,包括 64 位机器和 Windows 8.1。
下载 OpenCV 包
首先,到OpenCV 官方网站下载完整的 OpenCV 包。选择您喜欢的版本(2.x 或 3.x)。我在 Python 2.x 和 OpenCV 3.x 上——主要是因为这是OpenCV-Python 教程的设置/基础。
就我而言,我已将包(本质上是一个文件夹)直接提取到我的 C 驱动器 ( C:\opencv
)。
复制并粘贴 cv2.pyd 文件
Anaconda Site-packages 目录(例如C:\Users\Johnny\Anaconda\Lib\site-packages
在我的例子中)包含您可以导入的 Python 包。我们的目标是将cv2.pyd
文件复制并粘贴到此目录(以便我们可以import cv2
在 Python 代码中使用。)。
为此,请复制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
执行此步骤后,我们现在可以import cv2
在 Python 代码中使用。但是,我们仍然需要做更多的工作来让 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
导入OK,没有错误,并且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,我们需要:
- 从 OpenCV官方站点下载 OpenCV 包
- 复制并粘贴
cv2.pyd
到 Anaconda 站点包目录。
- 设置用户环境变量,以便 Anaconda 知道在哪里可以找到 FFMPEG 实用程序。
- 进行一些测试以确认 OpenCV 和 FFMPEG 现在可以正常工作。
祝你好运!