A library for solving calibrated central and non-central geometric vision problems

Before you start

If you are only interested in using the library under Matlab, now there is a precompiled mex-library for 64-bit systems available. You can download it from:

Mac OSX:

These versions have been added around March 2016, so please be aware that later additions may not be included in this distribution. You can go immediately to Use under Matlab to receive further instructions on the Matlab interface.

Downloading the source code

OpenGV is freely available under

You may first have to register on You can just download a zip-file with the code, but we strongly recommend that you make yourself familiar with git. Git is a distributed version-control and source code management system. By using git to clone the repository locally, you can easily get updates at a later stage, and also facilitate the integration of own improvements or extensions into the original repository on github. This is done using the pull-request mechanism.

To clone the library under Mac OSX or Linux, simply type (assuming that git is installed):

git clone

Under Windows you probably have a similar option. More information about git can be found here:

Follow the "Try git" link for an amazing interactive tutorial.

Installation under Linux

  • Setup the required tools for compilation of standard libraries under Linux (gcc compiler etc). Type:

    sudo apt-get install build-essential

  • Install cmake and eigen3, those tools are required by the library. Type:

    sudo apt-get install cmake libeigen3-dev

    CMake is a cross-platform, open-source build system used for pretty much anything in the compilation process but the compilation/linking itself. Eigen3 is a powerful linear algebra library used for all computations in OpenGV.

  • Go to the top-level directory of OpenGV. Type:

    mkdir build && cd build && cmake .. && make

  • Done. The default configuration does not build the tests or python-wrappers, please set the according variables in CMakeLists.txt to ON if you desire the tests or python-wrappers to be built as well.

Installation under Windows

  • We need a suitable compiler for C++. We chose Visual Studio Express, which is free. Google for "Microsoft Visual Studio Express", it should be one of the first links. Make sure you download and install the "Windows Desktop version". If you are in a school setting without Administrator rights, just go to your local IT guy and ask him to install Microsoft Visual Studio on your machine.

  • We also need CMake under Windows. Go to:

    and download the latest version. In a school setting without administrator rights, chose to download the zip-file. Extract it somewhere.

  • Open a new Developer Command Prompt for VS2012 and make sure all VS path variables are correctly set by checking the output of PATH. We also need to add the cmake-tools to the path. Add it by typing

    cd C:\<path to cmake>\bin

  • Go to the opengv directory and add a build folder
  • Now go to the


    directory, and setup the build process by typing:

    cmake -G "Visual Studio 11" ..

    You need to add the correct generator for your Visual Studio version. I downloaded Visual Studio 2012, so it's 11 :)

  • Now build the library by typing:

    msbuild opengv.sln /p:Configuration=Release

    inside the build directory. While there is not a single warning under Linux, there are thousands of warnings under Windows :) If anyone knows the reason, please let us know.

  • Note that we included third-party stuff like eigen in the sub-folder third_party. It is cleaner to get a fresh download of those dependencies on your computer, and reset the INCLUDE-directories in the CMakeLists.txt file. You should absolutely do so if you already have a version of these dependencies installed on your system.

Installation under OSX

Has been succesfully tested as well.

  • Install homebrew:
  • Type: "brew install cmake eigen"
  • Compile using normal cmake procedure.

Installing OpenGV on the host OS

At least under Linux and OSX, the installation on the host OS (including the headers) can be activated by simply setting INSTALL_OPENGV to ON.

Installing the Matlab-wrapper (Windows-version)

  • First setup the compiler from Matlab. Go to the matlab console and type

    mex -setup

    and chose the right compiler by following the instructions. You will have to chose the same compiler than the one you used for compiling the opengv library before-hand. Under Windows you might also run into the following problem. Depending on the distribution (e.g. R2012b), Matlab does not yet "know" your compiler (e.g. Visual Studio 2012), so you will have to additionally follow the instructions under

    to get things running. Also note that the Express compilers are not supported by Matlab, we ran into some issues when trying to use them. Please report if you have a solution to that.

  • Once this is done, you can compile the mex-file by going to the opengv/matlab folder and typing in the console

    mex -I../include -I../third_party -I../third_party/eigen3 -L../build/lib/Release -lopengv opengv.cpp

  • An additional note on 64-bit Windows/Matlab systems: If you have a Matlab version that is 64-bit, you will have to also compile OpenGV in 64-bit. You will have to follow two steps for this under Windows. The first one is to make sure that you open an x64 native tools command prompt to make the x64 Visual Studio compiler visible. The second one is to-when running cmake-extend the generator name by " Win64". The final command to run cmake finally looks as follows:

    cmake -G "Visual Studio 11 Win64" ..

    The actual build command stays the same.

Installing the Matlab-wrapper (Linux-version)

The following has been tested under Ubuntu 12.04 and a recent Matlab edition (>2013) (thanks to Oliver Dunkley for providing this information).

  • Install Matlab with the provided installer, and then add the matlab-support package through the package-repositories. This basically takes care of setting all the compiler stuff, adding a launcher, etc.
  • In order to make Matlab know about the shared object, the path to has to be added to LD_LIBRARY_PATH. Open .bashrc and add the line

    export LD_LIBRARY_PATH=<path to OpenGV>/build/lib:$LD_LIBRARY_PATH

    and then start Matlab from the terminal, it'll know about opengv ...

  • Go to the opengv/matlab-folder inside Matlab, and issue the command

    mex -I../include -I../third_party -I../third_party/eigen3 -L../build/lib -lopengv opengv.cpp -cxx

    Note the lib directory does not contain a Release subfolder under linux, and that the -cxx option has to be added.

Installing the Matlab-wrapper (OSX-version)

To compile the Matlab interface under OSX, use the same command as under Windows, with adapted library folder (-L../build/lib instead of -L../build/lib/Release). You of course need to make sure again that Matlab knows where to find the library, and that a suitable compiler is set up in Matlab as well.

Installing the python wrappers

The compliation of the Python wrappers can be enabled by setting the option BUILD_PYTHON to ON. Note that the python wrappers depend additionally on boost, and that the wrapper currently only allows access to the central methods.