mac安装opencv 3和python2.7

最开始偷懒,想着用最简单的方法安装opencv-python,使用pip install opencv-python,但是发现无法正常读取视频。在/pypi/opencv-python找到了原因

Q: Why I can't open video files on GNU/Linux distribution X or on macOS?
A: OpenCV video I/O depends heavily on FFmpeg. Manylinux and macOS OpenCV binaries are not compiled against it.

所以我们需要走一条稍微曲折一点的路,直接编译opencv

step 1:安装 Xcode

在appstore搜索xcode安装。我们需要xcode帮助我们安装配套的开发者工具,用于后面的opencv编译工作。

- 先注册apple开发者账号

这是免费的。如果你有一个apple id那么可以直接使用,如果你个人资料不全,可能会要求补充。我没有遇到这个问题,直接使用apple id,一路同意条款。这里注册

- 安装xcode

这个过程大约30分钟,xcode安装完成后在我的磁盘中占用4.9g

- 接收apple开发者许可协议

$ sudo xcodebuild -license

- 安装apple 命令行工具

$ sudo xcode-select --install

这里可能会弹出窗口提示你,是否同意安装。我这里没有到这个问题,我之前已经安装过apple 命令行工具

step 2:安装 Homebrew

Homebrew对于mac而言,是类似apt-get之于ubuntu的工具。

- 安装命令

直接复制,在terminal执行

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

- brew修改源

国外源的速度可能是很慢的。所以你需要换一个国内的源。我选了中科大的源,表现还可以。

$ cd "$(brew --repo)"
$ git remote set-url origin git://mirrors.ustc.edu.cn/brew.git
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile

update一下

brew update

- 配置环境变量

接下来你需要配置一下环境变量,在这个文件 ~/.bash_profile ,如果没有,那么需要你创建一个。

vi ~/.bash_profile

在~/.bash_profile最底下添加下面这一行

# Homebrew
export PATH=/usr/local/bin:$PATH

重新加载~/.bash_profile

source ~/.bash_profile

step 3:python及其虚拟环境

我安装好后的python路径为 /usr/local/Cellar/python/2.7.13

brew install python

接着安装virtualenv 和 virtualenvwrapper,搭建python虚拟环境,更多关于虚拟环境,看这里。为了避免奇怪的问题,建议使用虚拟环境。

$ pip install virtualenv virtualenvwrapper
$ mkvirtualenv opencv_2.7.13 # 创建虚拟环境
$ workon opencv_2.7.13  # 进入虚拟环境
$ pip install numpy # 安装numpy,后面需要

step 4:安装opencv需要的依赖

有的是用来读取图片的,例如jpeg libpng libtiff。有的是用来编译opencv的。

$ brew install cmake pkg-config
$ brew install jpeg libpng libtiff openexr 
$ brew install eigen tbb

step 5:从github下载opencv源码

可以打开链接直接下载,也可以通过git clone,opencvopencv_contrib,后者包含一些有意思的模型。

git clone https://github.com/opencv/opencv_contrib
git clone https://github.com/opencv/opencv

step 6:通过cmake配置opencv3和python2.7

- 创建build文件夹,并进入其中

进入刚下好的opencv文件夹,创建build文件夹,并进入build

$ cd ~/opencv
$ mkdir build
$ cd build

- 配置cmake

不要直接复制以下代码!!,有四个地方需要配置。

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH= 你的opencv_contrib位置 \
    -D PYTHON2_LIBRARY= 你的位置 PYTHON2_LIBRARY位置\
    -D PYTHON2_INCLUDE_DIR= 你的Python.h位置 \
    -D PYTHON2_EXECUTABLE= python虚拟环境的python执行程序地址\
    -D BUILD_opencv_python2=ON \
    -D BUILD_opencv_python3=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=ON ..
  • BUILD_opencv_python2 = ON,BUILD_opencv_python3=OFF,如果你需要python3也可以改变这个配置,但需要注意其他配置的PYTHON2需要改为PYTHON3
  • 如果不配置 OPENCV_EXTRA_MODULES_PATH,将会在下面make -j4报错,make: *** No targets specified and no makefile found. Stop.
  • PYTHON2_LIBRARY = 指向libpython2.7.dylib文件,一般在如下文件夹,你可能需要小改一下。我的是python 是 2.7.13,你可能是2.7.*
/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/libpython2.7.dylib
  • PYTHON2_INCLUDE_DIR = 指向Python.h所在文件夹,一般在如下文件夹,你可能需要小改一下,同上。
/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7/
  • PYTHON2_EXECUTABLE= 虚拟环境下的python执行程序地址
    这些都弄好后可以,我的配置如下
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH= /Users/xxx/Desktop/opencv_contrib-master/modules \
    -D PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/libpython2.7.dylib \
    -D PYTHON2_INCLUDE_DIR=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7/ \
    -D PYTHON2_EXECUTABLE=/Users/xxx/workspaces/opencv_2.7.13/bin/python \
    -D BUILD_opencv_python2=ON \
    -D BUILD_opencv_python3=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=ON ..

在terminal中执行,将会显示


需要检查红框中的配置,确保:

  • Iterpreter 指向虚拟环境的python执行程序
  • Libraries 指向 libpython2.7.dylib 文件
  • numpy 是安装在虚拟环境中的numpy

step 7:编译opencv

-编译

如果一切顺利,终于到了激动人心的编译时间。以下代码中的-j4指的是,开4个进程并行编译。

make -j4

这个过程花了我30分钟,其中有一次正在84%报错,但是我重新执行一次,却成功了。过程类似下图,知道100%


-安装

编译过程没有错误的前提下,执行安装

sudo make install

完成安装后,你会发现在以下文件夹发现多出了一个叫cv2.so的文件。

cd usr/local/lib/python2.7/site-packages/

恭喜! 终于完成了opencv-python的安装!
剩下的工作是为我们的python虚拟环境创建一个cv2.so的链接,进入你的python虚拟环境的site-packages目录,例如我的环境叫opencv_2.7.13

$ cd ~/opencv_2.7.13/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

-测试是否成功

彩蛋:在jupyter 中使用cv2

没有找到很好的方法可以让视频在jupyter notebook中播放,关于这个的问题在 stackoverflow 找到。如果有好的方法欢迎告诉我。
以下python代码,演示在jupyter notebook通过利用cv2中扑抓一帧。

# Use OpenCV
from matplotlib.pyplot import *
import numpy as np
import cv2

capture = cv2.VideoCapture(0) # 使用第一个摄像头
capture.open(0) # 摄像头是否开启
# out: True

capture.isOpened()  # 同上检测摄像头是否开启
# out: True

grabbed, frame = capture.read() # 扑抓一帧,grabbed 为bool,true说明扑抓到视频流,frame 为numpy矩阵
print('Frame grabbed: {0}'.format(grabbed))
# out: Frame grabbed: True

frame.shape #(height,width,channel)
# out: (720, 1280, 3)

frame_grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 调成黑白
imshow(frame_grey, cmap=cm.gray) # 用matplotlib.pyplot的imshow


参考链接
macOS: Install OpenCV 3 and Python 2.7
penCV-Python Tutorials

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容