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.
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.
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()
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.
Mathématiquement, la luminosité et le contraste peuvent être ajustés à l'aide de la formule :
new_image=contraste×luminosité de l'image
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 :
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()
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)
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()
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!