Welcome to the repository for executing various image processing labs using C++ and OpenCV. This README file provides detailed instructions on how to set up and run each lab. Each lab corresponds to specific image processing tasks, ranging from basic OpenCV functions to advanced techniques like histogram equalization, edge linking, and mathematical morphology.
- Prerequisites
- Installation
- Lab Descriptions and Execution
- L2: Learning OpenCV Functions
- L3: Learning OpenCV Functions and Animation
- LS: Annotation Tools
- L6: Find All the Connected Components in the Image
- L7: Improvise Your Method for Finding All the Connected Components in an Image
- L8: Histogram Equalization
- L9: Histogram Matching
- L10: Bilateral Filtering
- L11: Mathematical Morphology
- L12: Region Selection Followed by Boundary Detection and Thinning Using Mathematical Morphology
- L13: Find Zero Crossings in LoG
- L14: Edge Linking
- R1: Application of Image Processing
- R2: Improvize the Drawing with Mouse Lab Work
- R3: Resizing a Given Image
- R4: Read Chapter 2 from the Textbook
- R5: Read Chapter 3 from the Textbook
- R6: OpenCV Function for Image Enhancement
- Contributing
- License
Before you begin, ensure you have the following software installed:
- C++ Compiler: GCC or any other C++ compiler.
- OpenCV: Version 4.x or later.
- CMake: For building the project.
-
Clone the repository:
git clone https://github.com/HiBorn/image-processing-labs.git cd image-processing-labs
-
Build the project:
mkdir build cd build cmake .. make
Learn basic OpenCV functions such as image loading, displaying, and saving.
Execution:
./build/L2_basic_functions
Explore additional OpenCV functions and create simple animations.
Execution:
./build/L3_functions_and_animation
Implement annotation tools to mark and label images.
Execution:
./build/LS_annotation_tools
Find and label all connected components in a binary image.
Execution:
./build/L6_connected_components
Improve the method for detecting connected components for better accuracy and efficiency.
Execution:
./build/L7_improved_connected_components
Enhance the contrast of an image using histogram equalization.
Execution:
./build/L8_histogram_equalization
Match the histogram of one image to another for consistent intensity distribution.
Execution:
./build/L9_histogram_matching
Apply bilateral filtering to reduce noise while preserving edges.
Execution:
./build/L10_bilateral_filtering
Perform morphological operations like erosion, dilation, opening, and closing.
Execution:
./build/L11_mathematical_morphology
Select regions, detect boundaries, and apply thinning using morphological techniques.
Execution:
./build/L12_region_selection_boundary_thinning
Detect edges by finding zero crossings in the Laplacian of Gaussian.
Execution:
./build/L13_zero_crossings_log
Link edges detected in an image to form continuous boundaries.
Execution:
./build/L14_edge_linking
Explore various applications of image processing techniques.
Execution:
./build/R1_image_processing_applications
Enhance the functionality of mouse-based drawing applications.
Execution:
./build/R2_mouse_drawing_improvements
Implement and test different image resizing techniques.
Execution:
./build/R3_image_resizing
Read and understand Chapter 2 from the designated textbook.
Read and understand Chapter 3 from the designated textbook.
Utilize OpenCV functions to enhance image quality and features.
Execution:
./build/R6_image_enhancement
Contributions are welcome! Please read the CONTRIBUTING.md for guidelines on how to contribute to this project.
This project is licensed under the MIT License. See the LICENSE file for more details.