Skip to content

Instantly share code, notes, and snippets.

@cdcseacave
Last active May 19, 2025 07:06
Show Gist options
  • Save cdcseacave/ef290eacefa44db67dadaed01a6fe319 to your computer and use it in GitHub Desktop.
Save cdcseacave/ef290eacefa44db67dadaed01a6fe319 to your computer and use it in GitHub Desktop.
Build latest OpenMVG+OpenMVS+COLMAP in docker

Build by downloading Dockerfile locally and running: docker build -t="open_photogrammetry" .

Run by pointing to the input images folder and the output folder: docker run --name photogrammetry --rm -v <images-folder>:/images -v <work-folder>:/work -it open_photogrammetry python3 /opt/bin/MvgMvsPipeline.py /images /work

FROM ubuntu:20.04
# Get dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
cmake \
build-essential \
graphviz \
git \
coinor-libclp-dev \
libceres-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libxi-dev \
libxinerama-dev \
libxcursor-dev \
libxxf86vm-dev; \
apt-get autoclean && apt-get clean
# Boost
RUN apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
# CGAL
RUN apt-get -y install libcgal-dev libcgal-qt5-dev
#GLFW3 (Optional)
RUN apt-get -y install freeglut3-dev libglew-dev libglfw3-dev
# Install COLMAP dependencies
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-regex-dev \
libboost-system-dev \
libboost-test-dev \
libeigen3-dev \
libsuitesparse-dev \
libfreeimage-dev \
libgoogle-glog-dev \
libgflags-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev
# Build latest COLMAP
RUN git clone https://github.com/colmap/colmap.git --branch dev; \
mkdir comap_build && cd comap_build; \
cmake . ../colmap -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="/opt"; \
make -j4 && make install; \
cd .. && rm -rf comap_build
# OpenCV
RUN DEBIAN_FRONTEND=noninteractive apt-get install -yq libopencv-dev
# Build latest openvMVG
RUN git clone --recursive https://github.com/openMVG/openMVG.git --branch develop; \
mkdir openMVG_build && cd openMVG_build; \
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX="/opt" \
-DOpenMVG_BUILD_TESTS=OFF \
-DOpenMVG_BUILD_EXAMPLES=OFF \
-DOpenMVG_BUILD_DOC=OFF \
-DOpenMVG_BUILD_OPENGL_EXAMPLES=ON \
-DOpenMVG_USE_OPENCV=ON \
-DOpenMVG_USE_OCVSIFT=OFF \
-DCOINUTILS_INCLUDE_DIR_HINTS=/usr/include \
-DCLP_INCLUDE_DIR_HINTS=/usr/include \
-DOSI_INCLUDE_DIR_HINTS=/usr/include \
-DEIGEN_INCLUDE_DIR_HINTS=/usr/include/eigen3 \
../openMVG/src; \
make -j 4 && make install; \
cp ../openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt /opt/bin/; \
cd .. && rm -rf openMVG_build
# Eigen (Known issues with eigen 3.3.7 as of 12/10/2019, so using this tested branch/commit instead)
RUN git clone https://gitlab.com/libeigen/eigen --branch 3.2; \
mkdir eigen_build && cd eigen_build; \
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX="/usr/local/include/eigen32" . ../eigen; \
make && make install; \
cd .. && rm -rf eigen_build
# VCGLib
RUN git clone https://github.com/cdcseacave/VCG.git vcglib
# Build latest openMVS
RUN git clone https://github.com/cdcseacave/openMVS.git --branch develop; \
mkdir openMVS_build && cd openMVS_build; \
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release \
-DVCG_ROOT=/vcglib \
-DEIGEN3_INCLUDE_DIR=/usr/local/include/eigen32/include/eigen3 \
-DCMAKE_INSTALL_PREFIX="/opt"; \
make -j4 && make install; \
cp ../openMVS/MvgMvsPipeline.py /opt/bin/; \
cd .. && rm -rf openMVS_build
# Install cmvs-pmvs
RUN git clone https://github.com/pmoulon/CMVS-PMVS cmvs-pmvs; \
mkdir cmvs_pmvs_build && cd cmvs_pmvs_build; \
cmake ../cmvs-pmvs/program -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt; \
make -j4 && make install; \
cd .. && rm -rf cmvs_pmvs_build
# Add binaries to path
ENV PATH $PATH:/opt/bin:/opt/bin/OpenMVS
@Mastergalen
Copy link

Had to make a few modifications to get it to work with Ubuntu 22.04

# Source: https://gist.github.com/cdcseacave/ef290eacefa44db67dadaed01a6fe319 Credit to @cdcseacave
FROM ubuntu:22.04

# Get dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
  cmake \
  build-essential \
  graphviz \
  git \
  coinor-libclp-dev \
  libceres-dev \
  libjpeg-dev \
  libpng-dev \
  libtiff-dev \
  libxi-dev \
  libxinerama-dev \
  libxcursor-dev \
  libxxf86vm-dev \
  python3-dev && \
  apt-get autoclean && apt-get clean

# Boost
RUN apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev

# CGAL
RUN apt-get -y install libcgal-dev libcgal-qt5-dev

#GLFW3 (Optional)
RUN apt-get -y install freeglut3-dev libglew-dev libglfw3-dev

# Install COLMAP dependencies
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install \
  libboost-program-options-dev \
  libboost-filesystem-dev \
  libboost-graph-dev \
  libboost-regex-dev \
  libboost-system-dev \
  libboost-test-dev \
  libeigen3-dev \
  libsuitesparse-dev \
  libfreeimage-dev \
  libgoogle-glog-dev \
  libgflags-dev \
  libglew-dev \
  qtbase5-dev \
  libqt5opengl5-dev \
  libopencv-dev \
  libflann-dev libsqlite3-dev libmetis-dev && \
  apt-get autoclean && apt-get clean

# Build latest COLMAP
RUN git clone https://github.com/colmap/colmap.git --branch main && \
  mkdir colmap_build && cd colmap_build

RUN cmake . ../colmap -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX="/opt" && \
  make -j$(nproc) && make install && \
  cd .. && rm -rf colmap_build

# Build latest openvMVG
RUN git clone --recursive https://github.com/openMVG/openMVG.git --branch develop && \
    mkdir openMVG_build && cd openMVG_build && \
    cmake -DCMAKE_BUILD_TYPE=RELEASE \
       -DCMAKE_INSTALL_PREFIX="/opt" \
       -DOpenMVG_BUILD_TESTS=OFF \
       -DOpenMVG_BUILD_EXAMPLES=OFF \
       -DOpenMVG_BUILD_DOC=OFF \
       -DOpenMVG_BUILD_OPENGL_EXAMPLES=ON \
       -DOpenMVG_USE_OPENCV=ON \
       -DOpenMVG_USE_OCVSIFT=OFF \
       -DCOINUTILS_INCLUDE_DIR_HINTS=/usr/include \
       -DCLP_INCLUDE_DIR_HINTS=/usr/include \
       -DOSI_INCLUDE_DIR_HINTS=/usr/include \
       -DEIGEN_INCLUDE_DIR_HINTS=/usr/include/eigen3 \
       ../openMVG/src && \
    make -j$(nproc) && make install && \
    cp ../openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt /opt/bin/ && \
    cd .. && rm -rf openMVG_build

# Eigen
RUN git clone https://gitlab.com/libeigen/eigen --branch 3.4; \
  mkdir eigen_build && cd eigen_build; \
  cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX="/usr/local/include/eigen32" . ../eigen; \
  make -j$(nproc) && make install; \
  cd .. && rm -rf eigen_build

# VCGLib
RUN git clone https://github.com/cdcseacave/VCG.git vcglib

# Build latest openMVS
RUN git clone https://github.com/cdcseacave/openMVS.git --branch develop && \
    sed -i 's|<CGAL/AABB_traits_3.h>|<CGAL/AABB_tree.h>|g' openMVS/libs/MVS/SceneReconstruct.cpp && \
    sed -i 's|<CGAL/AABB_triangle_primitive_3.h>|<CGAL/AABB_triangle_primitive.h>|g' openMVS/libs/MVS/SceneReconstruct.cpp && \
    mkdir openMVS_build && cd openMVS_build && \
    cmake -DCMAKE_BUILD_TYPE=Release \
      -DVCG_ROOT=/vcglib \
      -DEIGEN3_INCLUDE_DIR=/usr/local/include/eigen32/include/eigen3 \
      -DPython3_ROOT_DIR=$(which python3) \
      -DCMAKE_INSTALL_PREFIX="/opt" \
      ../openMVS && \
  make -j$(nproc) && make install && \
  cp ../openMVS/scripts/python/MvgMvsPipeline.py /opt/bin/ && \
  cd .. && rm -rf openMVS_build

# Install cmvs-pmvs
RUN git clone https://github.com/pmoulon/CMVS-PMVS cmvs-pmvs; \
  mkdir cmvs_pmvs_build && cd cmvs_pmvs_build; \
  cmake ../cmvs-pmvs/program -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt; \
  make -j$(nproc) && make install; \
  cd .. && rm -rf cmvs_pmvs_build

# Add binaries to path
ENV PATH=$PATH:/opt/bin:/opt/bin/OpenMVS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment