Чем между собой отличаются все эти интерфейсы в формате OpenCV в Python?


здесь

  • opencv (библиотека от ребят из OpenCV),
  • cv (старая библиотека от парней OpenCV) и
  • pyopencv со своим предшественником ctypes-opencv.

каковы основные различия и какой из них я должен использовать?

1 76

1 ответ:

официально OpenCV выпускает два типа интерфейсов Python,cv и cv2.

cv:

я начал работать на cv. При этом все типы данных OpenCV сохраняются как таковые. Например, при загрузке изображения имеют формат cvMat, то же, что и в C++.

для операций с массивами существует несколько функций, таких как cvSet2D,cvGet2D и т. д. И некоторые дискуссии говорят, что они медленнее.

для imageROI, вам нужно специальные функции, такие как cvSetImageROI.

если вы найдете контуры, cvSeq возвращаются структуры, с которыми не так хорошо работать по сравнению со списками Python или массивами NumPy.

(и я думаю, скоро его развитие будет остановлено. Раньше было только cv. Позже OpenCV пришел с обоими cv и cv2. Теперь, там в последних релизах, есть только cv2 модуль, и cv подкласс внутри cv2. Вам нужно позвонить import cv2.cv as cv получить доступ к оно.)

cv2:

и последний cv2. В этом случае все возвращается как NumPy объекты типа ndarray и native Python объекты типа lists,tuples,dictionary и т. д. Так что благодаря этой поддержке NumPy, вы можете сделать любую операцию numpy здесь. NumPy - это очень стабильная и быстрая библиотека для обработки массива.

например, если вы загружаете изображение,ndarray возвращается.

array[i,j] дает вам значение пиксела на (i,j) позиция.

кроме того, для imageROI можно использовать нарезку массива, например ROI=array[c1:c2,r1:r2]. Нет необходимости в отдельных функциях.

чтобы добавить два изображения, нет необходимости вызывать какую-либо функцию, просто сделайте res = img1+img2. (Но добавление NumPy-это операция по модулю для массивов uint8, таких как изображения. Смотрите статью разница между матричной арифметикой в OpenCV и Numpy чтобы узнать больше.

контуры возвращаются списки массивов Numpy. Вы можете найти подробное обсуждение контуров в Контуры-1: Начало Работы.

короче говоря, с cv2 все упрощается и довольно быстро.

простая дискуссия о том, как NumPy ускорить cv2 находится в вопросе переполнения стека сравнение производительности интерфейсов OpenCV-Python, cv и cv2.

pyopencv:

я не много знаю об этом, так как я не использовал его. Но это, похоже, остановило дальнейшее развитие.

я думаю, что было бы лучше придерживаться официальных библиотек.

короче говоря, я бы рекомендовал вам использовать cv2!

EDIT: вы можете увидеть процедуру установки для cv2 модуль установить OpenCV в Windows для Python.