Comment puis-je équilibrer le contraste & luminosité des images à l'aide d'opencv?
J'ai une image que j'ai scanné, mais le livre blanc n'est pas blanc sur l'écran. Est-il un moyen d'égaliser le contrat de la luminosité pour rendre le fond plus blanc?
Mise à jour
J'ai essayé la suggestion de l'Image._EqualizeHist fonction de EmguCv:
string file = @"IMG_20120512_055533.jpg";
Image<Bgr, byte> originalColour = new Image<Bgr, byte>(file);
Image<Bgr, byte> improved = originalColour.Clone();
improved._EqualizeHist();
Mais obtenir un encore plus mauvais résultat (également lors de la première échelle de gris):
Qui me manque d'autres paramètres?
Un Débordement de pile fournit un service d'hébergement gratuit d'images, il suffit de cliquer sur le bouton image dans la barre d'outils et le point à votre image hébergée localement sur votre ordinateur, ailleurs sur le web. De ce fait les téléchargements et les miroirs d'une copie de l'image, qui nous assure qu'il sera toujours disponible, même si la source externe descend. J'ai déjà changé au fil des images que vous avez posté, mais juste quelque chose à garder à l'esprit pour l'avenir.
Je ne sais pas pourquoi, mais equalizehist donne plus pire résultat dans de tels cas.. moi aussi ce problème, parfois..
Je ne sais pas pourquoi, mais equalizehist donne plus pire résultat dans de tels cas.. moi aussi ce problème, parfois..
OriginalL'auteur tofi9 | 2012-05-12
Vous devez vous connecter pour publier un commentaire.
J'ai discuté de certaines techniques ici : Comment puis-je régler le contraste dans OpenCV en C?
S'il vous plaît vérifier. Ci-dessous sont les résultats que j'ai eu quand j'ai essayé les deux dernières méthodes, sur votre image
1) Seuillage:
Seuillage donne une image binaire. Si c'est ce que vous voulez, vous pouvez appliquer
threshold function
2) Si les niveaux de gris de l'image nécessaire :
Supplémentaires :
Morphological closing
aussi du bon travail dans votre cas(code en Python API)
Résultat Ci-Dessous:
pouvez-vous s'il vous plaît partager votre code avec moi?
OriginalL'auteur Abid Rahman K
Je suggère d'utiliser AdaptiveThreshold. Il fonctionne en faisant le quartier de seuillage pour chaque pixel de l'image (c'est vraiment une grosse affaire quand il y a de gradient horizons, un peu plus forte que dans votre image). Le
blockSize
paramètre est la taille du voisinage, et de la transformation des pixels de valeur doit être supérieure à la moyenne du quartier valeur moinsparam1
.Ici est de savoir comment le faire en python (il devrait être très facile de convertir à c):
OriginalL'auteur fraxel
Il est appelé equalizeHist. Je ne sais pas son nom dans emgu, mais le résultat devrait être exactement ce dont vous avez besoin - plus clair de fond, et la plus sombre de texte.
MODIFIER
Pour extraire uniquement les bords (ce qui est très différent de l'image l'amélioration des techniques de), vous pouvez simplement appliquer Futé. Sélectionnez les deux seuils de 20 et 60 ans, pour commencer, puis de l'augmenter (ou diminuer) en gardant un ratio de 3:1 entre eux, jusqu'à ce que vous avez un beau bord de l'image.
OriginalL'auteur Sam
Pour modifier la luminosité et le contraste, vous pouvez multiplier vos valeurs de pixel, puis ajouter quelques constantes. (Plus d'info sur Modification de la luminosité et du contraste d'une image, dans OpenCV docs.)
À l'aide de python et numpy:
Vous pouvez aussi simplement utiliser:
Dans votre image, vous pouvez vérifier dans l'histogramme que les valeurs maximales sont de l'ordre de 170 (en fait, c'est 172, si vous utilisez
img.max()
). Donc, vous pouvez multiplier votre image par255/172 = 1.48
pour augmenter la luminosité.Voir les résultats ci-dessous:
Et les histogrammes, respectivement:
OriginalL'auteur Gustavo K
De toute façon, vous pouvez également vérifier chaque pixel. Mettre à 0 si moins une valeur définie et mise à 255 si dépasser la définition de la valeur.
OriginalL'auteur Mzk