J'ai essayé la "correction gamma" de l'image avec Python + OpenCV

introduction

Le traitement d'image ne fournit pas toujours de belles images. Il peut contenir des objets sombres ou, au contraire, des images trop lumineuses. Il existe une méthode appelée correction gamma pour ajuster la luminosité de l'image.

Cette fois, nous utiliserons Python pour effectuer une correction gamma de l'image par OpenCV.

Qu'est-ce que la correction gamma?

** La correction gamma (ou conversion gamma) ** est simplement ** une méthode de réglage de la luminosité d'une image **.

L'image contient généralement des zones sombres et claires. Dans un tel cas, la fonction de correction gamma est d'ajuster la luminosité en fonction de chaque valeur de pixel au lieu d'ajuster la luminosité au même rapport pour l'image entière. La formule de correction gamma est la suivante.

y = 255\times\Bigl(\frac{x}{255}\Bigr)^{1/\gamma}

x est la valeur du pixel d'entrée et y est la valeur du pixel de sortie. C'est ce qu'on appelle la correction gamma car la sortie change en fonction de la valeur de $ \ gamma $ (gamma). Si $ \ gamma $ est supérieur à 1, il sera plus clair, et s'il est inférieur à 1, il sera plus sombre.

Le graphique de la correction gamma est le suivant.

image.png

Préparation

L'environnement utilise Google Colaboratory. La version Python est ci-dessous.

import platform
print("python " + platform.python_version())
# python 3.6.9

Montrons l'image

Maintenant écrivons le code.

Tout d'abord, importez OpenCV.

import cv2

De plus, importez les éléments suivants pour afficher l'image dans Colaboratory.

from google.colab.patches import cv2_imshow

Préparez également un exemple d'image. Cette fois, j'utiliserai l'image gratuite de Pixabay.

Maintenant, affichons l'exemple d'image préparé.

img = cv2.imread(path) #chemin spécifie où l'image est placée
cv2_imshow(img)

image.png

Éclaircissons maintenant l'image avec une correction gamma. Créez à l'avance une fonction de correction gamma.

import numpy as np

def create_gamma_img(gamma, img):
  gamma_cvt = np.zeros((256,1), dtype=np.uint8)
  for i in range(256):
    gamma_cvt[i][0] = 255*(float(i)/255)**(1.0/gamma)
  return cv2.LUT(img, gamma_cvt)

Affiche l'image corrigée gamma côte à côte avec l'image d'origine.

img_gamma = create_gamma_img(2, img)
imgs = cv2.hconcat([img, img_gamma])
cv2_imshow(imgs)

image.png

Rendre $ \ gamma $ supérieur à 1 pour le rendre plus lumineux. Je l'ai essayé comme 2 ci-dessus.

Maintenant, affichons une image corrigée gamma en changeant la valeur de $ \ gamma $ de différentes manières.

img1 = create_gamma_img(0.33, img)
img2 = create_gamma_img(0.5, img)
img3 = create_gamma_img(0.66, img)
img4 = create_gamma_img(1.5, img)
img5 = create_gamma_img(2, img)
img6 = create_gamma_img(3, img)
imgs_1 = cv2.hconcat([img1, img2, img3])
imgs_2 = cv2.hconcat([img4, img5, img6])
imgs = cv2.vconcat([imgs_1, imgs_2])
cv2_imshow(imgs)

image.png

En haut à gauche, la valeur de $ \ gamma $ a été augmentée. La ligne supérieure est plus sombre que l'image d'origine et la ligne inférieure est plus claire que l'image d'origine.

Résumé

Cette fois, j'ai utilisé Python pour effectuer une correction gamma (conversion gamma) sur l'image en utilisant OpenCV.

Si vous devez régler la luminosité de l'image, essayez la correction gamma.

Pour plus de détails sur la correction gamma (conversion gamma), reportez-vous à ce qui suit.

Recommended Posts

J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de "binariser" l'image avec Python + OpenCV
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé de corriger la forme trapézoïdale de l'image
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Comment couper la partie inférieure droite de l'image avec Python OpenCV
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
Édition d'image avec python OpenCV
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
Extraire le tableau des fichiers image avec OneDrive et Python
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
Python Open CV a essayé d'afficher l'image sous forme de texte.
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé de résumer les opérations de chaîne de Python
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
Je veux recadrer l'image le long du contour au lieu du rectangle [python OpenCV]
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé de simuler la propagation de l'infection avec Python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai essayé webScraping avec python.
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai évalué la stratégie de négociation du système boursier avec Python.
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai aimé le tweet avec python. ..
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
Trouver la similitude d'image avec Python + OpenCV