Czym się różnią wszystkie interfejsy OpenCV Python?

88

Tam są

Jakie są główne różnice i których należy użyć?

Framester
źródło

Odpowiedzi:

138

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 .

Abid Rahman K.
źródło
Interfejs cv2 Python zostanie skompilowany i zainstalowany, jeśli budujesz OpenCV ze źródeł. Jeśli używasz pakietów binarnych dla systemu Linux lub innego systemu operacyjnego, zapoznaj się z dokumentacją systemu operacyjnego / dystrybucji. Aby uzyskać pomoc, wejdź na goo.gl/MUjXi .
TH.
1
@Framester: zobacz procedurę instalacji cv2 w tym linku: opencvpython.blogspot.in/2012/05/…
Abid Rahman K
Odpowiedź Abida jest świetna. Jeszcze jeden punkt: zrobiłem projekt w Pythonie 3.x i jedynym sposobem, w jaki mogłem uzyskać dostęp do opencv, był ctypes_opencv i oryginalny OpenCV 1.0. Twierdzi, że obsługuje OpenCV przed 1.1, ale nigdy nie działało. Dzięki temu będziesz używać oryginalnego cvSetROI itp. Interfejs typu C.
KobeJohn
Jeśli chcesz zainstalować go za pomocą pip. czytaj tutaj lub zrób:pip install opencv-python
Timo