2015-04-08 9 views
5

Stavo guardando Opencv Java documentation of Hough Transform.In che modo il vettore di due elementi è rappresentato in un OpenCV Mat in Java?

Il valore restituito lines è in un tipo di dati Mat descritto come:

uscita vettore di linee. Ogni linea è rappresentata da un vettore a due elementi (rho, theta). rho è la distanza dall'origine delle coordinate (0,0) (angolo superiore sinistro dell'immagine). theta è l'angolo di rotazione della linea in radianti (0 ~ linea verticale, pi/2 ~ linea orizzontale).

Curiosamente, questa descrizione corrisponde the C++ interface's description, ma i dati non digitare: in C++ è possibile utilizzare un std::vector<cv::Vec2f> lines come descritto in this tutorial. In C++ la rappresentazione dei dati restituiti, data la descrizione, è semplice, ma in Java no.

Quindi, in Java, come viene rappresentato/memorizzato il vettore a due elementi nel Mat restituito?

risposta

5

Ecco un po 'di codice che ho usato qualche tempo fa, nella versione 2.4.8, penso. matLines provenivano da questo:

Imgproc.HoughLinesP(matOutline, matLines, 1, Math.PI/180, houghThreshCurrent, houghMinLength, houghMaxGap); 

...

Point[] points = new Point[]{ new Point(), new Point() }; 
for (int x = 0; x < matLines.cols(); x++) { 
    double[] vec = matLines.get(0, x); 
    points[0].x = vec[0]; 
    points[0].y = vec[1]; 
    points[1].x = vec[2]; 
    points[1].y = vec[3]; 
    //... 
} 
+0

Grazie! In realtà non sono quello che ne ha bisogno, vediamo cosa è l'autore di [questa domanda] (http://stackoverflow.com/questions/29493267/how-to-detect-lines-using-houghlines-in-opencv-java) dice ... – Antonio

+0

Mi sono preso la libertà di riscrivere il ciclo per evitare l'allocazione di memoria non necessaria nel ciclo; per le foto di grandi dimensioni, questo può essere una vera risorsa. – vaxquis

Problemi correlati