2012-05-11 17 views
6

Ich versuche nur, Kontrast/Helligkeit in einem Bild in Graustufen einzustellen, um Weiß in diesem Bild mit Opencv in C zu markieren. Wie kann ich das tun? Gibt es irgendeine Funktion, die diese Aufgabe in opencv macht?Wie kann ich den Kontrast in OpenCV in C einstellen?

Originalbild:

enter image description here

Modified Bild:

enter image description here

Vielen Dank im Voraus!

+0

Es ist möglich, sie in opencv anzupassen. Aber es wäre nützlicher, wenn Sie ein Bild hinzufügen und dann erklären könnten, was Sie wollen. –

+0

@Abid Rahman K Bilder hinzugefügt .. – edsonlp1

+0

Ist das zweite Bild, das Sie wollten als Ergebnis? Wenn ja, wie hast du es gemacht? das gleiche kann in Opencv getan werden –

Antwort

8

Ich glaube, Sie dagegen hier auf zwei Arten einstellen:

1) Histogram Equalization :

Aber als ich versuchte, diese mit dem Bild, das Ergebnis war nicht wie erwartet. Prüfen Sie es unter:

enter image description here

2) Thresholding:

Hier i verglichen jeden Pixelwert des Eingangs mit einem beliebigen Wert (was ich 127 nahm). Unten ist die Logik, die in opencv eingebaut hat. 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 

Und unten ist das Ergebnis bekam ich:

enter image description here

Dazu können Sie Threshold function oder compare function

3) verwenden Wenn Sie obligatorisch sind Graustufenbild als Ausgabe erhalten, tun Sie wie folgt: So

(Code ist in OpenCV-Python, sondern für jede Funktions sind entsprechende C Funktionen in opencv.itseez.com)

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

('x' ist ein willkürlicher Wert). Der Unterschied zwischen hellen und dunklen Pixeln nimmt zu.

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) 

Und unten ist das erzielte Ergebnis:

enter image description here

+0

Danke. Thresholding funktioniert für mich perfekt! – edsonlp1

+8

Nicht von diesen Adressen die Frage, d. H., Wie Kontrast einzustellen –

+1

ist es wahr, dass Frage Titel ist "wie Kontrast einstellen". Aber was er in Frage stellen möchte, ist, den weißen Teil im Bild hervorzuheben. Also beantwortete ich das mit meinem Wissen. Und natürlich sagte OP im Kommentar, eine Methode funktioniert perfekt für ihn. Also ich denke, dass es Problem adressiert hat. Wenn Sie nur den Titel in Betracht ziehen, haben Sie möglicherweise Recht. :) –

0

Sie müssen mit dem Histogramm arbeiten, wahrscheinlich nur ausgleichend. Hier ist eine gute tutorial dafür, und hier ist die C API description.

2

Die offizielle OpenCV Dokument zu diesem Thema, Brightness and contrast adjustments, Aktien-Code und eine detaillierte Erklärung, wie die Aufgabe zu erfüllen.

+5

Eigentlich nicht. Es bietet ein schlechtes Beispiel und verknüpft die Erklärung mit einem Buch, das Sie kaufen können. –

+1

Diese Dokumentation ist absolut nutzlos. – grill

+1

es führt zu einem unbekannten Host –

8

Sie können auch den OpenCV CLAHE-Algorithmus ausprobieren. Anstatt das Histogramm global zu entzerren, teilt es das Bild in Kacheln auf und entzerrt diese lokal und fügt sie dann zusammen. Dies kann zu einem viel besseren Ergebnis führen.

mit Ihrem Bild in 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) 

etwas gibt ziemlich nett

After CLAHE

mehr darüber lesen Sie hier, obwohl es nicht super hilfreich ist: http://docs.opencv.org/3.1.0/d5/daf/tutorial_py_histogram_equalization.html#gsc.tab=0