This repository contains a robust implementation of core Digital Image Processing (DIP) algorithms. Developed in C++ with OpenCV, the project provides a hands-on look at how images are manipulated at the pixel level, including spatial domain filtering, morphological analysis, and object recognition techniques.
The application features a menu-driven interface to perform over 40 different image processing operations on-the-fly.
- Point Processing: Grayscale conversion, brightness/contrast adjustment, and Binarization (Thresholding).
- Dithering: Implementation of the Floyd-Steinberg error diffusion algorithm for high-quality image quantization.
- Histogram Analysis: Generation of intensity histograms and cumulative histograms to analyze image distribution.
- Core Operations: Dilation and Erosion.
- Compound Operations: Opening and Closing (used for noise removal and shape smoothing).
- Iterative Processing: Multi-pass morphology for advanced structural analysis.
- Connected Component Labeling: Identifying and segmenting distinct objects within a binary image.
- Border Tracing: Algorithms to follow the contours of detected objects.
- Chain Code: Representing object boundaries as a sequence of directional codes (Freeman Chain Code) for shape analysis and reconstruction.
- Logical Operations: AND, OR, XOR operations between images.
- Advanced Labeling: Recursive and iterative processing for complex object identification.
- Language: C++
- Library: OpenCV 4.x (Core, Imgproc, Highgui)
- Environment: Visual Studio (with OpenCV configuration)
labeling()/processOfLabeling(): Handles object segmentation.dilation()/erosion()/opening()/closing(): Mathematical morphology suite.FloydSteinberg(): Advanced dithering logic.borderTracing(): Contour extraction.printHistogram(): Statistical image analysis.
- Dependencies: Ensure OpenCV is correctly linked in your C++ environment.
- Compile: Build the project using a C++ compiler (Visual Studio recommended).
- Execute: Run the application. A console menu will appear; select the number corresponding to the algorithm you wish to test.
- Input: Provide the path to a
.bmp,.jpg, or.pngfile when prompted.