import cv2
import numpy as np
"""
Modulo per applicare la correzione del contrasto ad un'immagine codificata in RGB o scala di grigi sfruttando openCV2.
"""
[documenti]
def contrast_correction(img: cv2.typing.MatLike, out_min: int = 100, out_max: int = 150) -> cv2.typing.MatLike:
"""
Questo metodo permette di comprimere i valori dell'immagine in un intervallo definito applicando la correzione
del contrasto.
Args:
img: l'immagine a cui viene applicata la correzione del contrasto.
out_min: intensità minima presente nell'immagine di output.
out_max: intensità massima presente nell'immagine di output.
Raises:
ValueError: se image non ha shape bidimensionale o tridimensionale.
Returns:
una matrice numpy che rappresenta l'immagine a cui è stato aggiunta la correzione del contrasto.
"""
if len(img.shape) == 2:
img = img.astype(np.float32)
img_norm = (img - np.min(img)) / (np.max(img) - np.min(img)) # normalize to 0–1
low_contrast = img_norm * (out_max - out_min) + out_min
return np.clip(low_contrast, 0, 255).astype(np.uint8)
elif len(img.shape) == 3:
result = np.zeros_like(img, dtype=np.uint8)
for i in range(3):
ch = img[:, :, i].astype(np.float32)
ch_norm = (ch - np.min(ch)) / (np.max(ch) - np.min(ch))
low_contrast = ch_norm * (out_max - out_min) + out_min
result[:, :, i] = np.clip(low_contrast, 0, 255).astype(np.uint8)
return result
else:
raise ValueError("Formato immagine non supportato.")