Can't install OpenCV3 on Anaconda3 python3.6 on macOS

I'm trying to install OpenCV 3.2.0 on Anaconda3 python 3.6 on macOS 10.11.6 but I can't find a way. My Anaconda3 has python 3.5.2 installed but if I create a new virtual environment using

$ conda create -n myvenv python  
then it downloads and installs python 3.6 on the new myvenv. A simple search  
$ conda search opencv
opencv                       2.4.8                np17py27_2  defaults 

while opencv3 yields no results

$ conda search opencv3
NoPackagesFoundError: Package missing in current osx-64 channels: 
  - opencv3

Installing menpo opencv3 build gives following conflict:

$ conda install -c menpo opencv3
Fetching package metadata ...........
Solving package specifications: .
UnsatisfiableError: The following specifications were found to be in conflict:
  - opencv3 -> python 2.7* -> openssl 1.0.1*
  - python 3.6*
Use "conda info <package>" to see the dependencies for each package.

I tried to install using homebrew but linking it with Anaconda3 python3 seems difficult:

$ brew install eigen tbb
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/eigen-3.3.1.el_capitan.bottle.tar.gz
100.0%
==> Pouring eigen-3.3.1.el_capitan.bottle.tar.gz
🍺  /usr/local/Cellar/eigen/3.3.1: 486 files, 6.4M
==> Downloading https://homebrew.bintray.com/bottles/tbb-4.4-20161128.el_capitan.bottle.tar.gz
100.0%
==> Pouring tbb-4.4-20161128.el_capitan.bottle.tar.gz
==> Caveats
Python modules have been installed and Homebrew's site-packages is not
in your Python sys.path, so you will not be able to import the modules
this formula installed. If you plan to develop with these modules,
please run:
  mkdir -p /Users/<username>/.local/lib/python3.5/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/<username>/.local/lib/python3.5/site-packages/homebrew.pth
==> Summary
🍺  /usr/local/Cellar/tbb/4.4-20161128: 119 files, 1.9M

More info

$ conda info
Current conda install:
               platform : osx-64
          conda version : 4.3.8
       conda is private : False
      conda-env version : 4.3.8
    conda-build version : 2.0.2
         python version : 3.5.2.final.0
       requests version : 2.12.4
       root environment : /Users/<username>/anaconda3  (writable)
    default environment : /Users/<username>/anaconda3/envs/lesvenv
       envs directories : /Users/<username>/anaconda3/envs
          package cache : /Users/<username>/anaconda3/pkgs
           channel URLs : https://repo.continuum.io/pkgs/free/osx-64
                          https://repo.continuum.io/pkgs/free/noarch
                          https://repo.continuum.io/pkgs/r/osx-64
                          https://repo.continuum.io/pkgs/r/noarch
                          https://repo.continuum.io/pkgs/pro/osx-64
                          https://repo.continuum.io/pkgs/pro/noarch
            config file : None
           offline mode : False
             user-agent : conda/4.3.8 requests/2.12.4 CPython/3.5.2 Darwin/15.6.0 OSX/10.11.6
                UID:GID : 502:20

while coda list is:

$ conda list
packages in environment at /Users/<username>/anaconda3/envs/lesvenv:
anaconda-client           1.6.0                    py36_0
clyent                    1.2.2                    py36_0
mkl                       2017.0.1                      0
numpy                     1.11.3                   py36_0
openssl                   1.0.2j                        0
pip                       9.0.1                    py36_1
python                    3.6.0                         0
python-dateutil           2.6.0                    py36_0
pytz                      2016.10                  py36_0
pyyaml                    3.12                     py36_0
readline                  6.2                           2
requests                  2.12.4                   py36_0
setuptools                27.2.0                   py36_0
six                       1.10.0                   py36_0
sqlite                    3.13.0                        0
tk                        8.5.18                        0
wheel                     0.29.0                   py36_0
xz                        5.2.2                         1
yaml                      0.1.6                         0
zlib                      1.2.8                         3

My anaconda is: /Users/<username>/anaconda3/bin/anaconda My python 3.5.2 is: /Users/<username>/anaconda3/bin/python My conda myvenv python 3.6 is: /Users/<username>/anaconda3/envs/myvenv/bin/python

Answers


Since you are using a newer version of python3, you would probably have to build opencv from the recipe yourself, which is available at https://github.com/conda-forge/opencv-feedstock

Another option is to have the specific version of python3 in your new environment by creating it like this:

(root) osx:Downloads nwani$ conda list | grep python
python                    3.6.0                         0 
(root) osx:Downloads nwani$ conda create -yn opencvtest python=3.5.2
(root) osx:Downloads nwani$ source activate opencvtest
(opencvtest) osx:Downloads nwani$ conda list | grep python
python                    3.5.2                         0

The version 3.1.0 builds of opencv are available on the conda-forge channel:

(root) osx:Downloads nwani$ conda search -c conda-forge --spec 'opencv=3*'
Fetching package metadata .........
opencv                       3.1.0               np110py27_0  conda-forge     
                             3.1.0               np110py34_0  conda-forge     
                             3.1.0               np110py35_0  conda-forge     
                             3.1.0               np111py27_0  conda-forge     
                             3.1.0               np111py34_0  conda-forge     
                             3.1.0               np111py35_0  conda-forge     
                             3.1.0               np110py27_1  conda-forge     
                             3.1.0               np110py34_1  conda-forge     
                             3.1.0               np110py35_1  conda-forge     
                             3.1.0               np111py27_1  conda-forge     
                             3.1.0               np111py34_1  conda-forge     
                             3.1.0               np111py35_1  conda-forge

You can install it like this:

(opencvtest) osx:Downloads nwani$ conda install -y -c conda-forge opencv 
(opencvtest) osx:Downloads nwani$ conda list | grep -e python -e opencv
# packages in environment at /Users/nwani/Downloads/m3/envs/opencvtest:
opencv                    3.1.0               np111py35_1    conda-forge
python                    3.5.2                         0  

This answer is now outdated (unless for some reason you wanted to use an older version of OpenCV) - please see this answer

The above correct answer did not work for me.

Ended up lowering the version of python until this is fixed.

conda install python=3.5 conda install -c menpo opencv3

I know this is not a permanent fix, but this works for me and you get to stay within the conda environment without doing much.

The issue is currently referenced here: https://github.com/conda/conda/issues/2448

Hope this helps!


I found that the accepted solution does not work on python 3.6 with anaconda.

So to install opencv manually and still have it work with conda:

$ cd ~
$ git clone https://github.com/opencv/opencv
$ git clone https://github.com/opencv/opencv_contrib
$ cd ~/opencv
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D PYTHON3_LIBRARY=/Users/yourusername/anaconda3/lib/libpython3.6m.dylib \
    -D PYTHON3_INCLUDE_DIR=/Users/yourusername/anaconda3/include/python3.6m \
    -D PYTHON_DEFAULT_EXECUTABLE=/Users/yourusername/anaconda3/bin/python3 \
    -D PYTHON_PACKAGES_PATH=/Users/yourusername/anaconda3/lib/python3.6/site-packages \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON \
    -D BUILD_opencv_python3=ON \
    -D BUILD_opencv_python2=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..
$ make -j4
$ make install

At this point the install should have gone smoothly. However if you go to terminal you will still get:

$ python
import cv2
ImportError: No module named cv2

So now rename this file

$ cd ~/opencv/lib/python3.6/site-packages
$ mv cv2.cpython-36m-darwin.so cv2.so

and copy it to this location

$ cp cv2.so /Users/yourusername/anaconda3/lib/python3.6/site-packages

and now it should work.

$ python
import cv2
cv2.__version__
'3.2.0-dev'

I installed anaconda3 on Win10, and i had the same error when i was installing opencv3 with conda: conda install -c menpo opencv3

Searched a while i saw this question and another similar one on google groups here. Somehow i managed to install opencv3 in a python35 virtual env, which might work also on Mac OS.

conda create --name python35 python=3.5
activate python35
conda install -c menpo opencv3

Afterwards, relaunch the Anaconda3 Navigator and choose the python35 environment.

Have a test in Spyder:

import cv2
print(cv2.__version__)
3.1.0

Update: Conda has a pre-built OpenCV package for Python 3.6 now!

The direct solution would be to just do the following in the base installation

conda install -c menpo opencv3

Previously, the packages were built up to Python 3.5, so I used to solve this problem with @VivekPatani's alternative.

Currently, conda menpo's repository has a pre-built version of OpenCV for the Python 3.6 version. Hence, downgrading to 3.5 or building OpenCV from source would not be necessary.


Need Your Help

Linker command failed with exit code 1 after installing CocoaPods and firebase pod

swift xcode firebase

I'm trying to use the firebase pod, however getting this (see image) error message when a run is attempted.

Structure of Arrays vs Array of Structures in CUDA

c++ c arrays struct cuda

From some comments that I have read in here, for some reason it is preferable to have Structure of Arrays (SoA) over Array of Structures (AoS) for parallel implementations like CUDA? If that is tru...