Tam są
opencv(biblioteka od facetów z OpenCV),cv(stara biblioteka od facetów z OpenCV) ipyopencvze swoim poprzednikiemctypes-opencv.
Jakie są główne różnice i których należy użyć?
Odpowiedzi:
Oficjalnie OpenCV wydaje dwa typy interfejsów Pythona cvi cv2.
cv:
Zacząłem pracować cv. W tym przypadku wszystkie typy danych OpenCV są jako takie zachowane. Na przykład po załadowaniu obrazy mają cvMattaki sam format jak w C ++.
W przypadku operacji tablicowych, istnieje kilka funkcji, takich jak cvSet2D, cvGet2Ditd A niektórzy mówią, dyskusje, są wolniejsze.
W przypadku imageROI potrzebne są specjalne funkcje, takie jak cvSetImageROI.
Jeśli znajdziesz kontury, cvSeqzwracane są struktury, z którymi nie jest tak dobrze pracować w porównaniu z listami Pythona lub tablicami NumPy.
(I myślę, że wkrótce jego rozwój zostanie zatrzymany. Wcześniej był tylko cv. Później OpenCV przyszedł z obydwoma cvi cv2. Teraz, w najnowszych wydaniach, jest tylko cv2moduł i cvjest wewnątrz podklasa cv2. Musisz zadzwonić import cv2.cv as cvaby uzyskać do niego dostęp).
cv2:
A najnowszy to cv2. W tym, wszystko jest zwracany jako NumPyprzedmioty jak ndarray i native Pythonobiektów jak lists, tuples, dictionary, itd. Tak więc z powodu tego wsparcia NumPy można wykonać dowolną operację numpy tutaj. NumPyjest wysoce stabilną i szybką biblioteką przetwarzania macierzy.
Na przykład po załadowaniu obrazu ndarrayzwracany jest znak.
array[i,j] podaje wartość piksela w pozycji (i, j).
Ponadto w przypadku imageROI można użyć dzielenia tablic, np ROI=array[c1:c2,r1:r2]. Nie ma potrzeby oddzielnych funkcji.
Aby dodać dwa obrazy, nie ma potrzeby wywoływania żadnej funkcji, po prostu zrób res = img1+img2. (Ale dodawanie NumPy to operacja modulo dla tablic uint8, takich jak obrazy. Zobacz artykuł Różnica między arytmetyką macierzy w OpenCV i Numpy, aby dowiedzieć się więcej.
Zwrócone kontury to listy tablic Numpy. Możesz znaleźć szczegółowe omówienie konturów w Contours - 1: Getting Started .
Krótko mówiąc, z cv2 wszystko jest uproszczone i dość szybkie.
Prosta dyskusja na temat przyspieszenia NumPy cv2w pytaniu Stack Overflow Porównanie wydajności interfejsów OpenCV-Python, cv i cv2 .
pyopencv :
Niewiele o tym wiem, ponieważ go nie używałem. Ale wydaje się, że zatrzymał dalszy rozwój.
Myślę, że lepiej byłoby trzymać się oficjalnych bibliotek.
Krótko mówiąc, poleciłbym ci użyć cv2!
EDYCJA: Możesz zobaczyć procedurę instalacji cv2modułu w Zainstaluj OpenCV w Windows dla Pythona .