← All projects

// C++

Photo Editor

  • shipped
  • 2024

Command-line image processing app in C++ for JPEG load/manipulate/export. Implements Gaussian blur, grayscale, Sobel edge detection, mirroring, sepia, color inversion in a clean OOP architecture.

  • C++
  • OOP
  • CMAKE

A command-line image processor I built to learn JPEG internals the hard way. It implements its own JPEG load/manipulate/export pipeline without external image libraries, then layers classical computer-vision operators (Gaussian blur, Sobel edge detection) and stylisation filters (sepia, grayscale, color inversion) on top. The architecture is split into an Image class, per-filter strategy classes, and a CLI parser, which made it easy to add new filters as I learned them.

Highlights

  • Hand-rolled JPEG load/manipulate/export pipeline without external image libraries
  • Gaussian blur, Sobel edge detection, sepia, grayscale, mirroring, color inversion
  • OOP architecture: Image class + per-filter strategy classes + CLI parser

Challenges

  • Implementing JPEG decoding well enough to round-trip files without visible drift
  • Choosing convolution kernels and stride values that look correct on real photos, not just test images

What I learned

  • Image formats are not magic — DCT + quantisation + Huffman is enough to know why JPEG artefacts look the way they do
  • Strategy pattern keeps filter pipelines easy to extend and benchmark

// more work

Other projects