2015-04-11 8 views
26

L'ultima versione di OpenCV mostra 2.4.11 febbraio 2015, che è più recente allora 3.0.0 che è in Beta. Qual'è la differenza tra loro. Dovrei usare OpenCV 2.4.11 su 3.0.0 perché ho riscontrato alcuni bug in 3.0.0. Come funzionano le loro uscite?qual è la differenza tra l'OpenCV 2.4.11 e 3.0.0

risposta

12

3.0.0 dovrebbe portare un sacco di nuove funzionalità ma è attualmente beta e non la versione ufficiale (può essere instabile). L'ultima versione ufficiale stabile è stata 2.4.11.

Utilizzare la 3.0.0 se ci sono funzionalità che non si recuperano in 2.4.11 o se si è avventurosi (3.0.0beta è ottimo e la versione finale dovrebbe venire presto). Se si desidera la sicurezza senza necessità aggiuntive, utilizzare 2.4.11.

+1

Puoi elencare alcune caratteristiche presenti in aggiunta a 3.0.0? E perché usano il versioning come 3.0.0 invece di dire 2.4.12 beta? –

+6

3.0.0 non sarà completamente retrocompatibile con 2.4.x. Inoltre, molte delle classi sono state completamente riscritte, nonché un'enfasi sulle funzioni accelerate della GPU. Sono stati aggiunti un numero di nuovi moduli, è possibile visualizzare un elenco di modifiche [qui] (http://code.opencv.org/projects/opencv/wiki/ChangeLog). –

+0

Hanno anche aperto una sfida per integrare tecnologie molto dirompenti: http: //code.opencv.org/projects/opencv/wiki/VisionChallenge –

41

Sebbene ci siano nuove funzionalità (come il rilevamento di testo, rilevatore KAZE) in OpenCV 3.0, per la maggior parte degli sviluppatori, questo confronto non riguarda le funzionalità. Si tratta della velocità . A meno che tu non sia immediatamente in produzione, ti suggerisco di utilizzare OpenCV 3.0. Inoltre, questo è tutt'altro che avventuroso.

  1. La differenza chiave è l'API trasparente in OpenCV 3.0. Quasi tutti i metodi OpenCV 3.0 sono accelerati da OpenCL. Quindi, tutti i metodi potrebbero essere eseguiti su GPU e questo potrebbe portare a miglioramenti dal 10 al 230%. L'unica modifica necessaria nel codice è l'utilizzo di UMat in cui era utilizzato Mat. Campioni (1). Se avevi bisogno di questa prestazione in OpenCV 2.4. *, Dovevi esplicitamente invocare i metodi cv::ocl::* o cv::gpu::*.
  2. Se sei uno sviluppatore Java, è ancora meglio. I wrapper Java per classi/metodi che prima non erano disponibili, sono ora forniti in OpenCV 3.0 (vedere KalmanFilter ampiamente utilizzato)
  3. Ci sono modifiche come la ristrutturazione dei moduli interni, che da un punto di vista dello sviluppatore è minore in quanto potrebbe essere risolto di cambiando le intestazioni di OpenCV nel tuo codice.

A proposito del ciclo di rilascio, un rapido sguardo in OpenCV github pronti contro termine (2) spettacoli, tirare richiesta sono per lo più andando in branch master, che è per OpenCV 3.0. Quindi io suppongo, le correzioni di errori importanti potrebbero essere trasferite al ramo 2.4. *.

Per ulteriori informazioni sulle differenze leggere (3) e (4). Per quanto riguarda i bug che hai incontrato nella versione 3.0 beta, potrebbe essere utile, se puoi sollevarli con un campione minimo completo in esecuzione nella pagina dei problemi di OpenCV (5).

+0

Ti capita di sapere se i collegamenti Java per OpenCV 3.x supportano OpenCL/CUDA per favore? – Robula

+0

I bind Java sono solo wrapper JNI. Quindi dovrebbero sostenere. – Kiran

7

Oltre alle risposte fornite sopra, un'altra importante differenza è che il rilevamento di funzionalità SIFT/SURF è stato rimosso dal pacchetto predefinito di openCV 3.0. Dal momento che essi sono brevettati, OpenCV è spostato 'non-free' algoritmi per un pacchetto diverso:

opencv_contrib 
Problemi correlati