美文网首页OpenCV
mac安装opencv 3和python2.7

mac安装opencv 3和python2.7

作者: 斯坦因和他的狗 | 来源:发表于2017-06-07 23:27 被阅读1412次

    最开始偷懒,想着用最简单的方法安装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

    相关文章

      网友评论

      • 就叫大黑:按照你的步骤,我执行到了step 6,更换了自己的cmake配置,但遇到提示:
        -- Could NOT find PythonLibs: Found unsuitable version "2.7.14", but required is exact version "2.7.10" (found /usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/libpython2.7.dylib)
        -- Could NOT find PythonInterp: Found unsuitable version "2.7.10", but required is at least "3.4" (found /Users/Jayson/.virtualenvs/cv2/bin/python)
        -- Could NOT find PythonInterp: Found unsuitable version "2.7.10", but required is at least "3.2" (found /Users/Jayson/.virtualenvs/cv2/bin/python)

        配置结果中,Libraries: No
        请问有什么办法解决吗?
      • 音视频直播技术专家:Xcode 是必须的吗?mac 本身有clang 和gcc 编译器,不知你测试过没
        斯坦因和他的狗:@音视频直播技术专家 没有哈

      本文标题:mac安装opencv 3和python2.7

      本文链接:https://www.haomeiwen.com/subject/rgtafxtx.html