30 lines
952 B
Python
30 lines
952 B
Python
import cv2
|
|
import numpy as np
|
|
from PIL import Image
|
|
|
|
|
|
def is_blurry(path: str, threshold: float = 100.0) -> bool:
|
|
"""Gibt True zurueck, wenn das Bild unscharf ist (Laplacian Variance < threshold)."""
|
|
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
|
|
if img is None:
|
|
return False
|
|
variance = cv2.Laplacian(img, cv2.CV_64F).var()
|
|
return bool(variance < threshold)
|
|
|
|
|
|
def _mean_brightness(path: str) -> float:
|
|
"""Durchschnittliche Helligkeit eines Bildes (0-255)."""
|
|
img = Image.open(path).convert("L")
|
|
arr = np.array(img, dtype=np.float32)
|
|
return float(arr.mean())
|
|
|
|
|
|
def is_overexposed(path: str, threshold: float = 240.0) -> bool:
|
|
"""Gibt True zurueck, wenn das Bild ueberbelichtet ist."""
|
|
return _mean_brightness(path) > threshold
|
|
|
|
|
|
def is_underexposed(path: str, threshold: float = 30.0) -> bool:
|
|
"""Gibt True zurueck, wenn das Bild unterbelichtet ist."""
|
|
return _mean_brightness(path) < threshold
|