This is an image processing application & library built using C++ and Qt. It contains set of the most common image processing algorithms and techniques, which are written with an emphasis on speed. It uses internally the CPLibrary library, that contains many optimized algorithms, data structures and mathematical functions, and Qt for the GUI. All the algorithms are implemented manually in the C++ language, and the GUI is implemented in the Qt framework.
- Supports loading, saving and processing binary, grey scale and color images.
- Showing image statistics (min, max, mean, standard deviation, histogram, etc.)
- Image processing algorithms (thresholding, filtering, edge detection, etc.)
- Linear: Spectral, Convolution, Gaussian, Laplacian, Sobel, Prewitt, Kirsch, Scharr, LoG, etc. It supports also custom filters, such user-defined Convolution operators and Spectral filters.
- Non-linear: Non-linear filters (Bilateral, Median, etc.)
- Thresholding: Binary, Otsu, Sauvola, etc.
- Edge detection: Canny, Laplacian, Sobel, Prewitt, Scharr, LoG, etc.
- Morphological: Erosion, Dilation, Opening, Closing, etc.
- Color: Color conversion, Color balance, etc.
- Noise: Gaussian, Pickle & Salt, Speckle, etc.
- Histogram: Histogram equalization, Histogram matching, etc.
- Thresholding: Adaptive, Otsu, Sauvola, etc.
- Padding: Padding, Cropping, etc.
- Supports mixing different algorithms and techniques, and applying them to the same image.
- Optimizing resource-heavy algorithms with smart data structures and algorithms, and using heuristics.
- Multi threading support for time-consuming algorithms, without sacrificing consistency.
- Easy to use, easy to understand, easy to modify, easy to extend.
It supports the following image formats:
- PBM: Portable Bitmap
- PGM: Portable Graymap
- PPM: Portable Pixmap
- To use the application, you need to install the Qt6 libraries. Note that it should be also compatible with Qt5, but that was not tested.
- To compile the application, you will need also to fork this repository, and compile it with the C++20 standard.
Here is a little demo of some results of the application:
a. Histogram equalization
b. Edge Detection
In this example we will use the Sobel operator to detect the edges of the image.
c. Spectral filtering
In this example we will view the spectrum of our image, and will apply a spectral filter to it that will remove unwanted high frequencies.