Come posso regolare il contrasto in OpenCV in C?

Sto solo cercando di regolare il contrasto/luminosità di un’immagine in scala di grigio per evidenziare bianchi, in quell’immagine, con Opencv in C. Come posso fare? c’è qualche funzione che rende questo compito in opencv?

Immagine originale:

Come posso regolare il contrasto in OpenCV in C?

Immagine modificata:

Come posso regolare il contrasto in OpenCV in C?

Grazie in anticipo!

È possibile regolare in opencv. Ma sarebbe più utile se si potesse aggiungere un’immagine, per poi spiegare che cosa volete.
Rahman K Immagini aggiunte..
È la seconda immagine che si voleva come risultato? Se è così, come hai fatto? lo stesso può essere fatto in Opencv
Rahman K ho fatto con photoshop 🙂 . Ho solo corretto il contrario, ma io voglio farlo con opencv

OriginaleL’autore edsonlp1 | 2012-05-11

3 Replies
  1. 9

    Penso che si può regolare il contrasto qui in due modi:

    1) Equalizzazione Dell’Istogramma :

    Ma quando ho provato questo con la vostra immagine, il risultato non è stato come previsto. È il seguente controllo:

    Come posso regolare il contrasto in OpenCV in C?

    2) Soglia :

    Qui, io rispetto ogni pixel il valore di input con un valore arbitrario ( che ho preso 127). Qui di seguito è la logica che ha integrato la funzione in matlab. 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

    E sotto è il risultato che ho ottenuto :

    Come posso regolare il contrasto in OpenCV in C?

    Per questo, è possibile utilizzare Funzione soglia o la funzione di confronto

    3) Se sono obbligatori per ottenere l’immagine in scala di grigi come output, fare come segue:

    (il codice è in OpenCV-Python, ma per ogni funzione, corrispondenti funzioni C sono disponibili 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’ è un valore arbitrario.) Così la differenza tra luce e buio pixel aumenta.

    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)

    E sotto è il risultato ottenuto:

    Come posso regolare il contrasto in OpenCV in C?

    Grazie. La soglia per me funziona perfetto!
    Non affrontare la questione, cioè come regolare il contrasto
    è vero che il titolo della domanda è ‘come regolare il contrasto. Ma cosa vuole fare in questione è quello di evidenziare la parte bianca dell’immagine. Così ho risposto con qualsiasi conoscenza che ho. E naturalmente, in commento, OP detto che un metodo funziona perfetto per lui. Quindi penso che sia affrontato il problema. Prendendo solo il titolo in esame, si può essere di destra. 🙂
    Dobbiamo cambiare OP domanda di evitare di fare ricerche che conduce a questo.

    OriginaleL’autore Abid Rahman K

  2. 10

    Si potrebbe anche controllare il OpenCV CLAHE algoritmo. Invece di equalizzazione dell’istogramma a livello globale, esso si divide l’immagine in piastrelle e pareggia localmente, poi li cuce insieme. Questo può dare un risultato molto migliore.

    Con la tua immagine 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)

    Dà qualcosa di molto bello

    Come posso regolare il contrasto in OpenCV in C?

    Per saperne di più qui, anche se non è super utile:
    http://docs.opencv.org/3.1.0/d5/daf/tutorial_py_histogram_equalization.html#gsc.tab=0

    OriginaleL’autore Nick Crews

  3. 0

    Anche se questo post è un po ‘ invecchiato:
    Che cosa circa l’utilizzo di “cvAddWeighted( )” ?

    Ciò che fa è:

                 dst = src1*alpha + src2*beta + gamma

    Quello che ho capito dall’applicazione di luminosità e contrasto, che vuole fare:

                 dst = src*contrast + brightness;

    quindi, se

                 src1  = input image
                 src2  = any image of same type as src1
                 alpha = contrast value
                 beta  = 0.0
                 gamma = brightness value
                 dst   = resulting Image (must be of same type as src1)

    Dovrebbe essere praticamente fatto con il compito, no?

    Questo approccio funziona per me utilizzando CvMat* immagini

    È stato chiesto in C
    C: void cvAddWeighted(const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst)…da non confondere con: C++ addWeighted()

    OriginaleL’autore P M

Lascia un commento