Es gibt
opencv
(die Bibliothek der OpenCV-Leute),cv
(die alte Bibliothek der OpenCV-Leute) undpyopencv
mit seinem Vorgängerctypes-opencv
.
Was sind die Hauptunterschiede und welche sollte ich verwenden?
Offiziell veröffentlicht OpenCV zwei Arten von Python-Schnittstellen cv
und cv2
.
Lebenslauf:
Ich fing an zu arbeiten cv
. Dabei bleiben alle OpenCV-Datentypen als solche erhalten. Wenn Bilder geladen werden cvMat
, haben sie beispielsweise das gleiche Format wie in C ++.
Für Array - Operationen gibt es mehrere Funktionen wie cvSet2D
, cvGet2D
usw. Und einige Diskussionen sagen, sie sind langsamer.
Für imageROI benötigen Sie spezielle Funktionen wie cvSetImageROI
.
Wenn Sie Konturen finden, werden cvSeq
Strukturen zurückgegeben, mit denen im Vergleich zu Python-Listen oder NumPy-Arrays nicht so gut gearbeitet werden kann.
(Und ich denke, bald wird seine Entwicklung gestoppt. Früher gab es nur cv
. Später kam OpenCV mit beiden cv
und cv2
. Jetzt gibt es in den neuesten Versionen nur das cv2
Modul und cv
eine Unterklasse im Inneren cv2
. Sie müssen anrufen import cv2.cv as cv
um darauf zuzugreifen.)
cv2:
Und das neueste ist cv2
. Dabei zurückgegeben wird alles als NumPy
Objekte wie ndarray
und native Python
Objekte wie lists
, tuples
, dictionary
usw. So aufgrund dieser NumPy Unterstützung, können Sie hier jeden numpy Betrieb tun. NumPy
ist eine hochstabile und schnelle Array-Verarbeitungsbibliothek.
Wenn Sie beispielsweise ein Bild laden, wird ein ndarray
zurückgegeben.
array[i,j]
gibt Ihnen den Pixelwert an der Position (i, j).
Auch für imageROI kann Array-Slicing wie verwendet werden ROI=array[c1:c2,r1:r2]
. Keine separaten Funktionen erforderlich.
Um zwei Bilder hinzuzufügen, müssen Sie keine Funktion aufrufen res = img1+img2
. (Die NumPy-Addition ist jedoch eine Modulo-Operation für uint8-Arrays wie Bilder. Weitere Informationen finden Sie im Artikel Unterschied zwischen Matrix-Arithmetik in OpenCV und Numpy .
Die zurückgegebenen Konturen sind Listen von Numpy-Arrays. Eine ausführliche Diskussion zu Konturen finden Sie in Konturen - 1: Erste Schritte .
Kurz gesagt, mit cv2 ist alles vereinfacht und ziemlich schnell.
Eine einfache Diskussion darüber, wie NumPy beschleunigt cv2
wird, finden Sie in der Frage zum Stapelüberlauf . Leistungsvergleich von OpenCV-Python-Schnittstellen, cv und cv2 .
pyopencv :
Ich weiß nicht viel darüber, da ich es nicht benutzt habe. Aber es scheint die weitere Entwicklung gestoppt zu haben.
Ich denke, es wäre besser, an offiziellen Bibliotheken festzuhalten.
Kurz gesagt, ich würde Ihnen empfehlen, cv2 zu verwenden!
BEARBEITEN: Die Installationsprozedur für das cv2
Modul finden Sie unter Installieren von OpenCV in Windows for Python .