Maison >développement back-end >Tutoriel Python >CVQu'est-ce qu'une image ?, Ajustons la luminosité et le contraste d'une image

CVQu'est-ce qu'une image ?, Ajustons la luminosité et le contraste d'une image

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 11:21:14984parcourir

Dans le contexte de CV2 en Python, lorsque vous lisez une image, elle est stockée sous forme de tableau 2D ou 3D de coordonnées Y et X avec des valeurs uint8 indiquant la couleur et la luminosité de l'image. Le terme uint8 fait référence à un type de données entier non signé de 8 bits allant de 0 à 255. Ceci, combiné à 3 canaux pour le rouge, le vert et le bleu (RVB), forme une image couleur.

Pourquoi cette structure est importante

Si vous commencez à modifier des parties de l'image comme un tableau normal (par exemple, en la divisant par 3), vous risquez de perdre ce format. Par exemple, les valeurs de pixels peuvent se situer en dehors de la plage de 0 à 255, rendant l'image inutilisable. Comprendre cette structure est crucial pour manipuler correctement les images.

Affichage d'une image dans CV2

Dans la bibliothèque CV2 Python, vous pouvez facilement visualiser une image à l'aide de l'extrait de code suivant :

#pip install opencv-python # if not already installed 
import cv2

# Load an image
image = cv2.imread('./test.png')

# Display the image in a window
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

Le code ci-dessus ouvrira une fenêtre contextuelle affichant l'image sur votre ordinateur. N'hésitez pas à ajouter une URL à votre propre image pour tester. Vous pouvez ensuite zoomer pour observer les valeurs RVB au niveau des pixels de l'image. Cette fonctionnalité de base est un excellent point de départ pour explorer le traitement d'image.

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

Luminosité et contraste

Que sont la luminosité et le contraste ?

  • La luminosité fait référence à la luminosité ou à l'obscurité globale d'une image, déterminée par l'intensité des pixels.
  • Le contraste fait référence à la différence d'intensité entre les pixels par rapport à une valeur de référence (par exemple, l'intensité moyenne des pixels). Il mesure essentiellement à quel point les variations de l'image sont « nettes » ou « distinctes ».

Mathématiquement, la luminosité et le contraste peuvent être ajustés à l'aide de la formule :

new_image=contraste×luminosité de l'image

Application de la luminosité et du contraste dans CV2

La fonction cv2.convertScaleAbs() dans OpenCV automatise ce processus. Il applique la formule ci-dessus tout en garantissant que les valeurs des pixels restent comprises entre 0 et 255.

Voici comment cela fonctionne :

  • alpha (contraste) : un facteur d'échelle, généralement compris entre 0,0 et 3,0.
  • bêta (luminosité) : une valeur de décalage, généralement comprise entre -100 et 100

Exemple d'utilisation :
new_image = cv2.convertScaleAbs(image, alpha=contraste, bêta=luminosité)

Cela nous permet de modifier facilement la luminosité et le contraste sans couper manuellement les valeurs des pixels.

image = cv2.imread('./test.png')
cv2.namedWindow('Adjustments')
contrast=0.8
brightness=89
image=cv2.convertScaleAbs(image, alpha=contrast, beta=brightness)
cv2.imshow('Adjustments', image) 
cv2.waitKey(0)
cv2.destroyAllWindows()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

Création d'ajustements interactifs avec des rappels

Bien qu'un ajustement ponctuel soit utile, la plupart du temps, nous souhaitons modifier la luminosité et le contraste de manière interactive. OpenCV nous permet d'y parvenir en utilisant la trackbar.

Les Trackbars peuvent être créées avec cv2.createTrackbar(), ce qui nous permet d'ajuster les valeurs de manière dynamique. La syntaxe générale est :
cv2.createTrackbar(trackbarname, winname, valeur, nombre, onChange_function)

  • trackbarname : Le nom de la barre de suivi.
  • winname : Le nom de la fenêtre OpenCV où la barre de suivi sera affichée.
  • valeur : la position initiale de la barre de suivi.
  • count : La valeur maximale de la barre de suivi.
  • onChange_function : une fonction de rappel qui est appelée chaque fois que la valeur de la barre de suivi change.

Ces trackbar peuvent alors être appelées dans la fonction onChange_function avec ;
cv2.getTrackbarPos(trackbarname, winname)
・trackbarname : Le nom de la barre de suivi
・ winname : Le nom de la fenêtre OpenCV où la barre de suivi sera affichée.

Pour régler à la fois la luminosité et le contraste, nous aurons besoin de deux trackbars.

#pip install opencv-python # if not already installed 
import cv2

# Load an image
image = cv2.imread('./test.png')

# Display the image in a window
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

Le réglage des curseurs de contraste et de luminosité déclenche la fonction on_change, qui lit les valeurs des barres de suivi à l'aide de cv2.getTrackbarPos(). Ces valeurs sont ensuite appliquées à l'image à l'aide de la fonction cv2.convertScaleAbs, et l'image mise à jour est affichée en temps réel.

Pour rendre l'application plus conviviale, j'ai ajouté un simple extrait à la fin pour permettre aux utilisateurs de quitter en appuyant sur la touche x. Cela résout un problème courant avec OpenCV, où la fermeture de la fenêtre n'arrête pas toujours l'exécution du code. En mettant cela en œuvre, l'application garantit une sortie propre sans processus persistants.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn