В чем разница между всеми этими интерфейсами OpenCV Python?

Есть

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

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

Ответ 1

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

резюме:

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

Для операций с массивом существует несколько функций, таких как 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 speed up cv2 находится в вопросе Сравнение производительности интерфейсов OpenCV-Python, cv и cv2.

pyopencv

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

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

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

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