2012-11-23 14 views
6

Ho intenzione di iniziare a sperimentare con BLOB come utente C++, con una certa esperienza in cv :: Mat di OpenCV.Blob con OpenCV. Quale libreria è la migliore?

Ora la domanda è: quale libreria di blob dovrei usare se non del tutto?

ho visto queste alternative finora:

  1. cvBlobs (on google code) - che è una libreria C in realtà, lavorando con IplImage quindi ha bisogno serio adattamento al C++.
  2. CvBlobsLib (on willowgarage opencv webpage) - che sembra una libreria C++ ma ha documenti piuttosto scadenti con un sacco di cose lasciate inspiegabili e quasi nessun esempio di codice.
  3. Ho visto cv :: findContours, cv :: moments e cv :: drawContours nella libreria OpenCV 2.4.3.

Cosa suggerisci come esperto? Il mio problema urgente: quale sarà il nuovo OpenCV non coprendo di cvBlobs su google code?


ecco il link per la domanda di follow-up su questo argomento, in cui chiedo SimpleBlobDetector. Potresti essere interessato

risposta

5

È necessario utilizzare SimpleBlobDetector class in OpenCV 2.4. Si crea praticamente un oggetto di tipo SimpleBlobDetector e quindi si chiama la funzione detect(cv::Mat input, vector<cv::KeyPoint> keypoints, cv::Mat mask) con un'immagine cv :: Mat come input, un vettore vuoto per i punti chiave e un altro cv :: Mat come una maschera facoltativa per un'area specifica dell'immagine da guardare per i punti chiave in.

Si noti che l'oggetto cv :: Mat ha assunto il controllo dell'immagine e della memoria matrice per tutte le classi di immagini e matrici precedentemente separate nelle versioni precedenti di OpenCV.

+0

OK, questa risposta sembra eccitante! Non sono sicuro di poterlo fare funzionare. Ho le seguenti preoccupazioni: questo restituisce solo il centro del blob, non posso avere un intero, etichettato Mat, posso? Inoltre, come posso accedere alle caratteristiche dei blob rilevati come area, convessità, colore e così via? Dovrei metterlo come domanda a parte e mi prometti di dare un'occhiata? :) –

+0

Ora sembra piuttosto un tutorial per me con un concetto non troppo maturo, non è neanche molto estensibile. :(Forse implementerò il mio wrapper su CBlob e lo installerò da qualche parte su –

+0

Il [link] (http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint) 'Keypoint' classe (cioè l'uscita della funzione di rilevamento) contiene la dimensione come diametro oltre al centro di ciascun blob rilevato.Inoltre, nel costruttore di 'SimpleBlobDetector', è possibile specificare i colori, la circolarità, l'area, la convessità desiderati e inerzia. Devi semplicemente inserirli nel costruttore in questo modo: 'SimpleBlobDetector myBlobDetector (bool filterByArea = true, float minArea = 10, float maxArea = 100);' – thealmightygrant

2

Dovresti dare un'occhiata al nuovo opencvblobslib. Ha grandi caratteristiche come il supporto multi-core.

+0

thx, +1 (e alcuni altri caratteri come richiesto da SO :)) –

Problemi correlati