Comment puis-je régler le contraste dans OpenCV en C?

J’essaie simplement de régler le contraste / la luminosité d’une image en niveaux de gris pour mettre en évidence les blancs dans cette image avec Opencv en C. Comment puis-je faire cela? Y at-il une fonction qui rend cette tâche dans opencv?

Image originale:

entrez la description de l'image ici

Image modifiée:

entrez la description de l'image ici

Merci d’avance!

Je pense que vous pouvez régler le contraste ici de deux manières:

1) égalisation d’histogramme:

Mais lorsque j’ai essayé cela avec votre image, le résultat n’était pas comme vous l’espériez. Vérifiez ci-dessous:

entrez la description de l'image ici

2) seuillage :

Ici, j’ai comparé chaque valeur d’entrée de pixel avec une valeur arbitraire (que j’ai prise 127 ). Ci-dessous se trouve la logique qui a une fonction intégrée dans l’opencv. But remember, output is Binary image, not grayscale as you did.

 If (input pixel value >= 127): ouput pixel value = 255 else: output pixel value = 0 

Et voici le résultat que j’ai obtenu:

entrez la description de l'image ici

Pour cela, vous pouvez utiliser la fonction Seuil ou la fonction de comparaison

3) Si vous êtes obligé d’obtenir une image en niveaux de gris en sortie, procédez comme suit :

(le code est en OpenCV-Python, mais pour chaque fonction, les fonctions C correspondantes sont disponibles dans opencv.itseez.com)

 for each pixel in image: if pixel value >= 127: add 'x' to pixel value. else : subtract 'x' from pixel value. 

(‘x’ est une valeur arbitraire.) Ainsi, la différence entre les pixels clairs et sombres augmente.

 img = cv2.imread('brain.jpg',0) bigmask = cv2.compare(img,np.uint8([127]),cv2.CMP_GE) smallmask = cv2.bitwise_not(bigmask) x = np.uint8([90]) big = cv2.add(img,x,mask = bigmask) small = cv2.subtract(img,x,mask = smallmask) res = cv2.add(big,small) 

Et ci-dessous est le résultat obtenu:

entrez la description de l'image ici

Vous pouvez également consulter l’algorithme OpenCV CLAHE. Au lieu d’égaliser l’histogramme globalement, il divise l’image en tuiles et égalise celles-ci localement, puis les assemble. Cela peut donner un bien meilleur résultat.

Avec votre image dans OpenCV 3.0.0:

 import cv2 inp = cv2.imread('inp.jpg',0) clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8)) res = clahe.apply(inp) cv2.imwrite('res.jpg', res) 

Donne quelque chose d’assez gentil

Après CLAHE

Lisez-en plus ici, même si ce n’est pas très utile: http://docs.opencv.org/3.1.0/d5/daf/tutorial_py_histogram_equalization.html#gsc.tab=0