What’s OpenCV?

Ahhh, computer vision, such a cool field! Lately, I’ve been trying to become more knowledgeable about CV and image processing in python. OpenCV (CV = ‘computer vision’) is an excellent open source computer vision software library written in C++ that supports C++, C, Python, Java, and Matlab API’s. OpenCV will supply you with functions that will let you detect faces in images, track objects in a video, and perform any number of image processing tasks.

The only problem is: how the hell do I install OpenCV so that I can use it in conjunction with a Jupyter notebook? Let’s be honest, most likely you’re either you’re using a Jupyter notebook, Spyder, or the ipython terminal (if you’re a real sadist) to test your python code. And especially if you’re coding for image processing, you’re going to want to view your progress without having (a) a million separate images open and (b) having to wait for Spyder to inevitably crash. That’s the beauty of a Jupyter notebook - when you’re using it with Matplotlib, you can just display your images and videos in a living document!

For me, my ideal OpenCV situation would be for me to be able to simply type and evaluate the following import statements with zero errors or package conficts:

import opencv
img = cv2.imread("The_Cure_Rules.png")


Problems with traditional installation methods

There are many ways to install OpenCV. The standard approach is to download it from the OpenCV website and then compile and install OpenCV using the software building utility “CMake” all within a virutal Python environment. I’ve gone down this route according to Adrian Rosebrock’s fabulous installation walkthrough, and if you just want to have access to OpenCV 3.0, I suggest you consider it. But, at the end of the day, there are even more steps required after Adrian’s 9 steps to get OpenCV compatible with a Jupyter notebook. Other installation walkthroughs I’ve found tend to be generally convoluted and assume that you have Homebrew, XCode, maybe MacPorts, or just experience in general with installing and building software packages. Wouldn’t it be great if we could just run something analogous to pip install opencv?

If you’re like me (maybe you’re not) I often think that pip install‘ing a Python package is the same thing as R’s install.packages function - while we get similar functionality, R packages come with the luxury of basically never interfering with other R package dependencies! If one package needs a newer or older version of some other package you’ve already installed, install.packages will most likely just take care of everything for you. Python packages, on the other hand, will often have dependencies on specific versions of other packages, so if you pip install one package, other package may fail to import because their dependent packages have been updated. That’s why we use virtual environments; my favorite method for creating and running virtual environments is with Anaconda, a Python distribution that comes with Sklearn, Scipy, NumPy, Jupyter notebook, and most of the other essential tools a data scientist needs when using Python.

Overall, I installed OpenCV cleanly in just a few steps:

  • Install Anaconda, make Anaconda’s Python your system’s default Python (skip if you already have this).
  • Create a virtual environment.
  • Make sure all Conda packages are up-to-date.
  • Run conda install -c https://conda.binstar.org/menpo opencv
  • Test.


(1) Install Anaconda. (Skip if you already have Anaconda).

First off, I’m still a python 2 guy. Yeah, there’s python 3, but I grew up on Py 2.7 and it’ll take a lot to pry it from my cold, dead hands. So I have a python 2.7 Anaconda environment running on my computer. Your choice.

I went to the Anaconda downloads page and got the Python 2.7 Mac OS X 64-Bit command-line installer, so that we can install everything from Terminal.

After downloading that, navigate to your Downloads directory (if you’re new to the Terminal, just open the Terminal application and type cd $HOME/Downloads).

While still in Terminal, enter

$ bash Anaconda2-2.5.0-MacOSX-x86_64.sh

Awesome, now you’ve downloaded and installed Anaconda.


(1.b) Make Anaconda your default python installation.

For data science, Anaconda rules. Ideally, when you’re in Terminal and you type python, you’d like for the Anaconda python installation to be the default python that starts running instead of what comes installed by default on a typical Macbook. Why? Well, using Anaconda we can just import NumPy, import any Scikit Learn funciton, import Matplotlib, etc.

To see what I’m talking about, type this in Terminal:

$ which python

If you get /usr/bin/python2.7, you’re not using the Anaconda installation. To change this, you’ll need to change your bash_profile so that the default path to the python installation in the Anaconda directory. If you don’t have a .bash_profile file in your home directory, do this:

$ touch $HOME/.bash_profile

This just created that file. Next, open the .bash_profile page and add this line:

export PATH=”~/anaconda/bin:$PATH”

Finally, you have to make your system update python path the with your new settings, so in Terminal type

$ source $HOME/.bash_profile


(2) Make an Anaconda virtual environment

Anaconda has great documentation if you ever get lost using their tools, but otherwise they’re pretty easy to use. To create a virtual python 2.7 environment called “py27,” run this:

$ conda create -n py27 python=2.7 anaconda

To enter this virtual environment, we use Conda’s source activate function:

$ source activate py27

If the environment is running properly, you should see (py27) preceding the $ sign at the command prompt in Terminal. In this environment we have access to Anaconda’s python package installer, conda install, so that we can install packages at will in this “bubble” without messing up dependencies (basically breaking python) in any other environment. Side note: if you want to exit this py27 environment, just enter source deactivate in Terminal.


(3) Update packages

Just to be safe, I updated all of my python packages while inside of my py27 environment. It’s ridiculously easy with Anaconda:

$ conda update --all


(4) Install OpenCV

With Anconda we can install python packages within a specific Conda environment using conda install instead of pip, the typical python package management system.

Next, I would normally suggest just typing conda install opencv at the command prompt, but this (unsurprisingly) lead me to a package conflict with NumPy! Yep, the version of OpenCV that Conda installed relied on a specific release of the NumPy package that was actually in conflict with the one that was just updated in step (3). OK, to be honest, maybe I brought that upon myself with updating the packages the way I did. But, there’s a work around that functions with this latest update of NumPy: install OpenCV directly from the Menpo project:

$ conda install -c https://conda.binstar.org/menpo opencv


(5) Fire up a Jupyter notebook and test!

The Anaconda environment should now have everything we need to start analyzing images in a self-contained little Jupyter notebook. Test it out. First, launch a Jupyter notebook from the terminal:

$ jupyter notebook

Next, see if everything is installed correctly; hopefully you’ll be able to run this sans errors:

jupyter notebook

If successful, you’ll be able to readily access OpenCV functions with the package prefix cv2!