2012-07-11 5 views
5

Cosa significa questa riga di codice e come posso convertire questo codice in javacv?Qual è il significato della seguente riga di codice in opencv?

gray = Scalar::all(255); 

Questo è l'intero codice relativo a questa riga di codice.

Mat src = imread("in.jpg"), gray; 

cvtColor(src, gray, CV_BGR2GRAY); 
threshold(gray, gray, 230, 255, THRESH_BINARY_INV); 
vector<Vec4i> hierarchy; 
vector<vector<Point> > contours; 
findContours(gray, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); 

gray = Scalar::all(255); 

Qualcuno può spiegarlo?

+0

che cosa è questo codice su? –

+0

Utilizzato per trovare i contorni nell'immagine e ci sono alcuni codici anche dopo questo – NadLnk

+2

Penso che la linea diventi grigia per completare il bianco. Se è possibile eseguire il codice cpp, eseguirlo e mostrare il grigio alla fine. –

risposta

2

Come ho detto nel mio commento, viene utilizzato per impostare l'immagine grigio al bianco.

Qual è il suo vantaggio? Si può dire solo se sappiamo a cosa serve questo codice o vedere il codice completo.

Per quanto riguarda Java, OpenCV ha ora alcuni esempi di Android, in cui è possibile trovare i codici Java.

È possibile controllarli. I saw a similar function there: mWhilte = Scalar.all(255);

di controllare anche la campioni JavaCV: http://code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_2

2

La riga di codice evidenziata diventa grigia a 255. È uno dei metodi disponibili in OpenCV per impostare una matrice su un valore.

Altri modi per farlo sono:

gray.setTo(255); // prior to 2.3.1 it was a buggy on multichannel images 
gray = 255; // prior to 2.3.1 it was a buggy on multichannel images 

gray.setTo(Scalar::all(255)); // it works regardless the OpenCV version. 

Ma penso che la domanda è: perché questa linea di origine dopo findfContours ...

Secondo la documentazione, findContours modifica l'immagine che sta lavorando su (estrae un contorno, lo elimina, quindi procede a quello successivo, fino a quando non ci sono più contorni). Il risultato è un'immagine spazzatura (probabilmente nera).

Quindi, la linea impostata su 255 lo cancella per qualche altro uso.

Il metodo Mat::setTo() dovrebbe anche essere disponibile in JavaCV, quindi non dovreste avere problemi convertendolo in Java

+0

0 o 255? –

+0

Si può dare un semplice esempio di codice per questo? – NadLnk