Retina-UX-Auditor / src /utils /image_processing.py
Owadokun Tosin Tobi
Update image_processing.py
98b32b5 unverified
Raw
History Blame Contribute Delete
1.59 kB
import cv2
import numpy as np
from typing import Optional, Tuple
import base64
def load_image_from_bytes(image_bytes: bytes) -> np.ndarray:
"""
Decodes raw byte stream into an OpenCV BGR image array.
"""
if not image_bytes:
raise ValueError("Empty image bytes provided")
nparr = np.frombuffer(image_bytes, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
if img is None:
raise ValueError("Failed to decode image data")
return img
def resize_image(image: np.ndarray, max_width: int = 1024) -> np.ndarray:
"""
Resizes image to a specific width while maintaining aspect ratio
to ensure consistent processing speed.
"""
height, width = image.shape[:2]
if width <= max_width:
return image
scale = max_width / width
new_height = int(height * scale)
return cv2.resize(image, (max_width, new_height), interpolation=cv2.INTER_AREA)
def convert_to_grayscale(image: np.ndarray) -> np.ndarray:
"""
Converts BGR image to Grayscale for edge detection.
"""
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
def encode_image_to_base64(image: np.ndarray) -> str:
"""
Encodes an OpenCV image (numpy array) to a Base64 PNG string
for display in HTML img tags.
"""
success, buffer = cv2.imencode(".png", image)
if not success:
raise ValueError("Could not encode image")
b64_string = base64.b64encode(buffer).decode("utf-8")
return f"data:image/png;base64,{b64_string}"