A lightweight, modular, and educational Computer Vision library written in modern C++17.
VisionLite is an open-source image processing library built from scratch using modern C++. The project is designed to help students, researchers, and developers understand how fundamental image processing algorithms work internally while providing a clean and reusable library for real-world applications.
Instead of relying on heavyweight frameworks, VisionLite focuses on simplicity, readability, modular architecture, and educational value.
Modern Computer Vision libraries are extremely powerful, but they often hide the implementation details of the algorithms they use.
VisionLite was created to solve this problem.
The main goal of this project is to provide a lightweight implementation of classical image processing algorithms that is easy to read, easy to extend, and suitable for learning.
Whether you are studying Digital Image Processing, Computer Vision, Artificial Intelligence, Machine Learning, or simply improving your C++ skills, VisionLite aims to be a useful learning resource.
| Category | Status |
|---|---|
| BMP Reader / Writer | β |
| Image Class | β |
| Convolution Filters | β |
| Histogram Analysis | β |
| Histogram Equalization | β |
| Brightness / Contrast | β |
| Gamma Correction | β |
| Morphological Operations | β |
| Drawing | β |
| Geometric Transformations | β |
| Color Spaces | π§ |
- C++17
- CMake 3.15+
- No third-party image processing libraries
VisionLite includes a collection of classic image processing algorithms implemented from scratch in modern C++. Below are examples of the implemented filters and morphological operations.
VisionLite
β
βββ assets
β βββ demo
β βββ input
β βββ output
β
βββ include
βββ src
βββ examples
βββ tests
β
βββ CMakeLists.txt
βββ README.md
| Folder | Description |
|---|---|
| include | Public library headers |
| src | Library implementation |
| examples | Demo applications |
| assets/input | Input images |
| assets/output | Generated output images |
| assets/demo | Images shown in this README |
VisionLite is developed around five core principles.
Algorithms should be easy to understand.
Readable code is more valuable than clever code.
Each module should have a single responsibility.
The project is designed to help students understand how image processing algorithms work internally.
Adding new algorithms should require minimal changes to the existing codebase.
Continue reading below to learn how to build the project, run the examples, and use VisionLite in your own applications.
This section explains how to build and run VisionLite on your system.
Before building the project, make sure you have the following tools installed.
- Visual Studio 2022 (or newer) with C++ Desktop Development tools
- CMake 3.20 or later
- Git
- GCC (C++17 compatible)
- CMake 3.20 or later
- Git
- Make
Clone the repository
git clone https://github.com/MahdiZeim/VisionLite.git
cd VisionLiteConfigure the project
cmake -S . -B buildBuild
cmake --build buildRun the demo
Windows
.\build\Debug\visionlite_demo.exeLinux
./build/visionlite_demoInclude the required headers.
#include <visionlite/image.hpp>
#include <visionlite/bmp.hpp>
#include <visionlite/filters.hpp>Load an image.
auto img =
visionlite::BMP::load(
"assets/input/test.bmp"
);Apply a filter.
auto gray =
visionlite::Filters::graysclae(img);Save the result.
visionlite::BMP::save("assets/output/gray.bmp");VisionLite is written in Modern C++17 and avoids unnecessary dynamic allocations whenever possible.
The library is designed to be:
- Lightweight
- Fast
- Easy to understand
- Easy to extend
Performance optimizations will continue in future releases.
VisionLite is especially useful for:
- Computer Science students
- Artificial Intelligence students
- Computer Vision researchers
- Robotics developers
- Image Processing courses
- Machine Learning practitioners
- Anyone learning Modern C++
It can also serve as a reference implementation for educational purposes or as a starting point for larger computer vision projects.
Contributions are welcome.
If you would like to improve VisionLite, you can contribute by:
- Fixing bugs
- Improving documentation
- Optimizing existing algorithms
- Implementing new image processing techniques
- Adding unit tests
- Improving code quality
Please open an Issue before making major changes so the proposed improvement can be discussed first.
If you find VisionLite useful, consider starring the repository. It helps other developers discover the project.
VisionLite was developed as an educational and lightweight alternative for learning classical image processing algorithms implemented in Modern C++.
No.
One of the main goals of the project is to implement image processing algorithms from scratch without relying on external computer vision libraries.
Yes.
VisionLite is intended to be a learning resource for students studying subjects such as:
- Digital Image Processing
- Computer Vision
- Artificial Intelligence
- Machine Learning
- Robotics
However, understanding the algorithms is strongly encouraged rather than simply copying the implementation.
The project is under active development.
Although many implemented algorithms are fully functional, new features, optimizations, and improvements will continue to be added.
VisionLite is more than just another image processing library.
The long-term vision of the project is to become a lightweight educational framework that demonstrates how classical computer vision algorithms work internally while maintaining clean software architecture and modern C++ design principles.
The project aims to bridge the gap between theoretical university courses and practical software engineering.
For questions, suggestions, or collaboration opportunities:
- Mohammadmahdi Amiri
- π§ mamiri@eng.uk.ac.ir
- π§ mahdiamiri511@gmail.com
Special thanks to all students, developers, researchers, and open-source contributors who share knowledge and inspire others to learn.
If VisionLite helps you in your studies, research, or software projects, consider giving the repository a β on GitHub.
Your support encourages future development and helps the project reach more learners around the world.




