This project was developed in the 3-day sprint for my Real-time image processing with CPUs and GPUs class in University of Jean-Monnet Saint-Étienne (UJM) for my Master program IMLEX. The goal of this project is to experiment with different formats of 360° images and videos, and apply image processing techniques using openCV and CUDA.
The following goals were set:
- implement the following image transformations with OpenCV and CUDA:
- Equirectangular => Cube map
- Cube map => Equirectangular
- apply image processing methods (e.g., gaussian blur) to an equirectangular image and display it with
image-360.html
- apply image processing methods to each face of a cube map and transform the result in its equirectangular representation, then display it with
image-360.html
- apply the cube based method on normal and stereo videos
- C++ compiler
- OpenCV
- CUDA
Data used is a self-capture of 360° equirectangular images, which were used to generate the cube map images. A 360° video was also used and can be obtained by downloading from here or by using wget
:
wget https://drive.google.com/file/d/11EXntJ0xs5AxysyZY65hkW75XnG7FZTw/view?usp=share_link
The project is organized as follows:
build
: contains generated executablesdata
: contains the data (i.e., images and videos). Program output goes todata/out
.docs
: contains documentation (mostly for this readme)src
: contains source code (.cpp
,.cu
,.html
, etc)
To compile, simply run sh compile.sh
.
To execute, pass in as an argument the path to the image file:
# Equirectangular to cubemap conversion:
./build/equiToCube ./data/image-360.jpg
# Cubemap to equirectangular conversion:
./build/cubeToEqui ./data/image-360-cubemap.jpg