A low-level C++ image processing engine capable of manipulating raw pixel matrices to compute smooth transitions (morphing) between distinct static images and dynamically reordering image-based video sequences.
Rather than relying on high-level multimedia libraries, this engine performs direct memory manipulation and per-pixel linear algebra calculations on uncompressed image buffers (e.g., PGM format), demonstrating performance-oriented data structure management and file I/O operations.
- Linear Blending Morph Engine: Computes intermediate states between a source matrix and a target matrix. It applies a mathematical interpolation algorithm per pixel to generate a user-defined number of transitional frames, creating a fluid morphing effect.
- Temporal Sequence Reversal: Restructures and inverts the temporal order of large directory-based image sequences (frames) to reconstruct a reversed video stream without memory saturation.
- Raw Buffer Manipulation: Bypasses standard encoding APIs to directly parse, process, and write raw PGM/PPM file headers and pixel data matrices.
- Batch Processing I/O: Efficiently traverses file systems to handle batch reading and writing of hundreds of sequential frames.
- Language: C++11
- Core Concepts: Digital Image Processing, Linear Interpolation, Matrix Operations, Memory Management, File System I/O.
You can compile the separate modules directly using g++:
g++ -std=c++11 -O2 src/morphing.cpp -o morph
g++ -std=c++11 -O2 src/rebobinar.cpp -o reverseGenerates a sequence of transitional frames between two images.
# Syntax: ./morph <source_img> <target_img> <output_folder> <num_frames>
./morph data/imagenes/Azucena.pgm data/imagenes/Pedro.pgm data/videos/morph_az_pe 30Inverts an entire sequence of frames to play backwards.
# Syntax: ./reverse <input_folder> <output_folder>
./reverse data/videos/missa data/videos/reb_misssaDistributed under the MIT License.