Cosa c'è di diverso tra tutte queste interfacce OpenCV Python?


88

Ci sono

Quali sono le principali differenze e quale dovrei usare?

Risposte:


138

Ufficialmente, OpenCV rilascia due tipi di interfacce Python cve cv2.

CV:

Ho iniziato a lavorare cv. In questo, tutti i tipi di dati OpenCV vengono conservati come tali. Ad esempio, una volta caricate, le immagini sono di formato cvMat, come in C ++.

Per le operazioni di array, ci sono diverse funzioni come cvSet2D, cvGet2D, ecc E alcune discussioni dicono, sono più lenti.

Per imageROI, hai bisogno di funzioni speciali come cvSetImageROI.

Se trovi i contorni, cvSeqvengono restituite strutture che non è così buono da lavorare rispetto agli elenchi Python o agli array NumPy.

(E penso che presto il suo sviluppo verrà interrotto. Prima c'era solo cv. Successivamente, OpenCV è arrivato con entrambi cve cv2. Ora, nelle ultime versioni, c'è solo il cv2modulo, ed cvè una sottoclasse all'interno cv2. Devi chiamare import cv2.cv as cvper accedervi.)

cv2:

E l'ultima è cv2. In questo, tutto ciò che viene restituito come NumPyoggetti come ndarray e native Pythonoggetti come lists, tuples, dictionary, ecc Quindi a causa di questo supporto NumPy, si può fare qualsiasi operazione NumPy qui. NumPyè una libreria di elaborazione degli array altamente stabile e veloce.

Ad esempio, se carichi un'immagine, ndarrayviene restituito un file.

array[i,j] ti dà il valore del pixel nella posizione (i, j).

Inoltre, per imageROI, lo slicing dell'array può essere usato come ROI=array[c1:c2,r1:r2]. Non c'è bisogno di funzioni separate.

Per aggiungere due immagini, non è necessario chiamare alcuna funzione, basta farlo res = img1+img2. (Ma l'aggiunta di NumPy è un'operazione modulo per array uint8 come le immagini. Vedi l'articolo Differenza tra Matrix Arithmetic in OpenCV e Numpy per saperne di più.

I contorni restituiti sono elenchi di array Numpy. È possibile trovare una discussione dettagliata su Contours in Contours - 1: Guida introduttiva .

Insomma, con cv2 tutto è semplificato e abbastanza veloce.

Una semplice discussione su come NumPy accelera cv2è nella domanda Stack Overflow Confronto delle prestazioni delle interfacce OpenCV-Python, cv e cv2 .

pyopencv :

Non ne so molto da quando non l'ho usato. Ma sembra aver fermato ulteriori sviluppi.

Penso che sarebbe meglio restare fedeli alle biblioteche ufficiali.

In breve, ti consiglierei di usare cv2!

EDIT: Puoi vedere la procedura di installazione per il cv2modulo in Installa OpenCV in Windows per Python .


cv2 L'interfaccia Python verrà compilata e installata se stai compilando OpenCV dai sorgenti. Se stai usando pacchetti binari per Linux o altri sistemi operativi dovresti consultare la documentazione del tuo sistema operativo / distribuzione. Consulta goo.gl/MUjXi per assistenza.
TH.

1
@Framester: vedi la procedura di installazione per cv2 in questo link: opencvpython.blogspot.in/2012/05/…
Abid Rahman K

La risposta di Abid è fantastica. Solo per aggiungere un altro punto: ho fatto un progetto con Python 3.x e l'unico modo in cui ho potuto accedere a opencv era attraverso ctypes_opencv e l'originale OpenCV 1.0. Dichiara il supporto per OpenCV pre1.1 ma non l'ho mai fatto funzionare. Con ciò, utilizzerai l'originale cvSetROI, ecc. Interfaccia di tipo C.
KobeJohn

Se vuoi installarlo con pip. leggi qui o fai:pip install opencv-python
Timo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.