OpenCV 是计算机视觉处理任务中的常用库,也因为复杂度高,对它的安装也不是那么一蹴而就。今天重新把它给本机Python2,Python3重新安装了一下,特此做个记录。

(这里不涉及虚拟环境配置部分,需要的话可以看原文。)

操作环境:

  • macOS 10.12.5
  • Python 2.7.13
  • Python 3.6.1
  • cv2 version 3.2.0

首先你需要安装 Homebrew,这个不用说了。完成之后用它来安装两个版本的python(这个分裂真是!当初python3出来,就应该尽快把python2干掉,就没那么多后遗症了):

$ brew install python python3

这里再次强调一下,mac系统自带的python不是用来给你做开发的。其它常用的工具,ruby,git等,都用brew装一遍。安装完成之后需要link一下:

$ brew linkapps python
$ brew linkapps python3

查看环境时候会调用 brew 版本的两个 python:

$ which python
/usr/local/bin/python
$ which python3
/usr/local/bin/python3

你可以在命令行下,使上述配置生效

source ~/.bash_profile

然后查看brew安装的两个python的版本号:

$ python --version
Python 2.7.13
$ python3 --version
Python 3.6.1

brew不能一键安装OpenCV(用的人少???),你需要加一个tap:

brew tap homebrew/science

下面是复杂的地方,你以为配置完这个tap就可以搞定了。但是如果你直接装,可能会报错:

opencv3: Does not support building both Python 2 and 3 wrappers

解决办法有两个,我只写作者推荐的那个。报错原因是现有版本做了不必要的check。所以你需要编辑一下配置文件:

brew edit opencv3

如果你没设置Homebrew编辑器,默认会用vim打开(论vim的重要性!)

你需要在第187行找到这几行字。把它们用 # 号comment掉。

if build.with?("python3") && build.with?("python")
  # Opencv3 Does not support building both Python 2 and 3 versions
  odie "opencv3: Does not support building both Python 2 and 3 wrappers"
end

修改前(盗图):

修改后(还是盗图):

保存退出,然后开始正式安装。

brew install opencv3 --with-contrib --with-python3

要让python找到你刚刚安好的cv2,需要再敲一行:

$ echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth

这一行创建了一个 .pth 文件告诉 Homebrew’s 的 Python 2.7 额外的包在 /usr/local/opt/opencv3/lib/python2.7/site-packages 找。

这还没完,你会发现cv2在python3的路径下有一个搞笑的名字叫cv2.cpython-36m-darwin.so

$ ls -l /usr/local/opt/opencv3/lib/python3.6/site-packages/
total 6952
-r--r--r--  1 admin  admin  3556384 Dec 15 09:28 cv2.cpython-36m-darwin.so

你需要把它重命名成 cv2.so

$ cd /usr/local/opt/opencv3/lib/python3.6/site-packages/
$ mv cv2.cpython-36m-darwin.so cv2.so
$ cd ~

还没完,你需要告诉 homebrew 的 python3,去哪里找这个库:

$ echo /usr/local/opt/opencv3/lib/python3.6/site-packages >> /usr/local/lib/python3.6/site-packages/opencv3.pth

安装完成进行验证:

$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'
$ python3
Python 3.6.1 (default, Apr  4 2017, 09:40:21)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'

至此大功告成,可以玩耍了。其它问题可以仔细参考下面这两篇文章,讲的很好:

Install OpenCV 3 on macOS with Homebrew (the easy way)

Resolving macOS, OpenCV, and Homebrew install errors