Tam są
opencv
(biblioteka od facetów z OpenCV),cv
(stara biblioteka od facetów z OpenCV) ipyopencv
ze 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 cv
i 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ą cvMat
taki sam format jak w C ++.
W przypadku operacji tablicowych, istnieje kilka funkcji, takich jak cvSet2D
, cvGet2D
itd A niektórzy mówią, dyskusje, są wolniejsze.
W przypadku imageROI potrzebne są specjalne funkcje, takie jak cvSetImageROI
.
Jeśli znajdziesz kontury, cvSeq
zwracane 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 cv
i cv2
. Teraz, w najnowszych wydaniach, jest tylko cv2
moduł i cv
jest wewnątrz podklasa cv2
. Musisz zadzwonić import cv2.cv as cv
aby uzyskać do niego dostęp).
cv2:
A najnowszy to cv2
. W tym, wszystko jest zwracany jako NumPy
przedmioty jak ndarray
i native Python
obiektów jak lists
, tuples
, dictionary
, itd. Tak więc z powodu tego wsparcia NumPy można wykonać dowolną operację numpy tutaj. NumPy
jest wysoce stabilną i szybką biblioteką przetwarzania macierzy.
Na przykład po załadowaniu obrazu ndarray
zwracany 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 cv2
w 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 cv2
modułu w Zainstaluj OpenCV w Windows dla Pythona .