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


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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.