c++ - library - opencv download



Sequenze OpenCV-come creare una sequenza di coppie di punti? (1)

Sto cercando di creare una sequenza vuota ( CvSeq ) in OpenCV simile a quella restituita da, ad esempio, cvHoughLines2 (se usato in CV_HOUGH_PROBABILISTIC ) - una sequenza di coppie di punti.

Ho trovato un modo per creare una sequenza di punti (non connessi) (spero che questo sia corretto per una sequenza di punti):

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(
             CV_SEQ_FLAG_SIMPLE | CV_SEQ_KIND_SET | CV_SEQ_ELTYPE_POINT,
             sizeof(CvSeq), sizeof(CvPoint), memStorage); 

ma guardando i flag disponibili per la creazione di CvSeq non riesco a trovare nulla che potrei usare per costruire una sequenza i cui elementi sarebbero coppie di punti. Vorrei accedere agli elementi della mia sequenza creata nello stesso modo in cui accedo alle linee che ho ricevuto da Hough Transform:

for (int i=0; i < mylines->total; ++i){
    CvPoint *line = (CvPoint *)cvGetSeqElem(mylines, i);

    ...

    ... line[0].x ...
    ... line[1].y ... 

    ...
}

Inoltre, come inserirò gli elementi in tale sequenza? : /

Il motivo della domanda è che ho già una funzione piuttosto complessa che funziona su un CvSeq di righe restituite da una funzione cvHoughLines2() , e vorrei usarlo su alcune linee arbitrarie che cvHoughLines2() nell'immagine (scopi di test, ecc. ...). Ho cercato dappertutto una risposta a una domanda simile, ma non ho trovato nulla ... :(

Grazie mille a tutti per il vostro aiuto!

EDIT: trovato la soluzione.

Sembra che l'unica cosa da fare sia omettere completamente i flag, indicando che non userete nessuno dei tipi predefiniti (ad es. Punti), e date semplicemente la giusta dimensione del componente della sequenza:

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);

Posso aggiungere alla memoria passando il puntatore ad una matrice di 2 punti alla funzione push :

CvPoint points[2];
... (initialize the points) ...
cvSeqPush(seq, &points);

In questo modo posso accedere alla sequenza nello stesso modo in cui ho avuto accesso all'output di Hough Transform.


Dopo 20 minuti alla ricerca di una soluzione per aiutare, ho letto l'intera domanda e ho trovato una soluzione di modifica. Copia e incolla , per ottenere questa risposta senza risposta .

Sembra che l' unica cosa da fare sia omettere completamente i flag , indicando che non userete nessuno dei tipi predefiniti (ad es. Punti), e date semplicemente la giusta dimensione del componente della sequenza:

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);

Posso aggiungere alla memoria passando il puntatore ad una matrice di 2 punti alla funzione push:

CvPoint points[2];
... (initialize the points) ...
cvSeqPush(seq, &points);

In questo modo posso accedere alla sequenza nello stesso modo in cui ho avuto accesso all'output di Hough Transform.





opencv