""" Example script demonstrating the Image class functionality. """ import sys from pathlib import Path # Add parent directory to path for imports sys.path.insert(0, str(Path(__file__).parent.parent)) from src.utils import Image, ImageLoadError def demonstrate_image_loading(): """Demonstrate basic image loading functionality.""" print("=" * 60) print("Image Class Demonstration") print("=" * 60) # Example 1: Try to load an image (replace with your own path) example_paths = [ "data/datasets/example.jpg", "data/datasets/sample.png", "tests/test_image.jpg", ] loaded_img = None for image_path in example_paths: if Path(image_path).exists(): try: print(f"\n1. Loading image: {image_path}") img = Image(image_path) loaded_img = img print(f" ✓ Successfully loaded!") print(f" {img}") break except ImageLoadError as e: print(f" ✗ Failed: {e}") else: print(f"\n1. Image not found: {image_path}") if loaded_img is None: print("\nNo example images found. Creating a test image...") create_test_image() return # Example 2: Access image properties print(f"\n2. Image Properties:") print(f" Width: {loaded_img.width} pixels") print(f" Height: {loaded_img.height} pixels") print(f" Channels: {loaded_img.channels}") print(f" Format: {loaded_img.format.upper()}") print(f" Shape: {loaded_img.shape}") print(f" File size: {loaded_img.size_mb:.2f} MB") print(f" Is color: {loaded_img.is_color()}") print(f" Is grayscale: {loaded_img.is_grayscale()}") # Example 3: Get different formats print(f"\n3. Accessing Image Data:") print(f" BGR data shape: {loaded_img.data.shape}") print(f" RGB data shape: {loaded_img.get_rgb().shape}") print(f" Grayscale shape: {loaded_img.get_grayscale().shape}") print(f" PIL image mode: {loaded_img.pil_image.mode}") # Example 4: Resizing print(f"\n4. Resizing Image:") resized = loaded_img.resize(320, 320) print(f" Original size: {loaded_img.width}x{loaded_img.height}") print(f" Resized to: {resized.shape[1]}x{resized.shape[0]}") # Example 5: Working with copies print(f"\n5. Creating Copies:") copy = loaded_img.copy() print(f" Created copy with shape: {copy.shape}") print(f" Original data unchanged: {(loaded_img.data == copy).all()}") print("\n" + "=" * 60) print("Demonstration Complete!") print("=" * 60) def create_test_image(): """Create a test image for demonstration purposes.""" import cv2 import numpy as np print("\nCreating a test image...") # Create a colorful test image width, height = 400, 300 test_img = np.zeros((height, width, 3), dtype=np.uint8) # Add some colors test_img[:100, :] = [255, 0, 0] # Blue section test_img[100:200, :] = [0, 255, 0] # Green section test_img[200:, :] = [0, 0, 255] # Red section # Save the test image test_path = Path("test_demo_image.png") cv2.imwrite(str(test_path), test_img) print(f"Test image created: {test_path}") # Now load and demonstrate with it try: img = Image(test_path) print(f"\nLoaded test image: {img}") print(f"Dimensions: {img.width}x{img.height}") print(f"Channels: {img.channels}") print(f"Format: {img.format}") # Clean up test_path.unlink() print(f"\nTest image cleaned up.") except ImageLoadError as e: print(f"Error loading test image: {e}") def demonstrate_error_handling(): """Demonstrate error handling.""" print("\n" + "=" * 60) print("Error Handling Demonstration") print("=" * 60) # Try to load non-existent file print("\n1. Loading non-existent file:") try: img = Image("nonexistent.jpg") except ImageLoadError as e: print(f" ✓ Caught error: {e}") # Try unsupported format print("\n2. Loading unsupported format:") try: # Create a text file test_file = Path("test.txt") test_file.write_text("not an image") img = Image(test_file) except ImageLoadError as e: print(f" ✓ Caught error: {e}") test_file.unlink() # Clean up print("\n" + "=" * 60) if __name__ == "__main__": print("\n") demonstrate_image_loading() print("\n") demonstrate_error_handling() print("\n")