Есть
opencv
(библиотека от ребят из OpenCV),cv
(старая библиотека от ребят из OpenCV) иpyopencv
со своим предшественникомctypes-opencv
.
Каковы основные отличия и какой из них я должен использовать?
Ответы:
Официально OpenCV выпускает два типа интерфейсов Python: cv
и cv2
.
резюме:
Я начал работать 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. Вы можете найти подробное обсуждение Contours in Contours - 1: Getting Started .
Короче говоря, с cv2 все упрощается и довольно быстро.
Простое обсуждение того, как ускоряется NumPy, cv2
находится в вопросе о переполнении стека Сравнение производительности интерфейсов OpenCV-Python, cv и cv2 .
pyopencv :
Я мало что знаю об этом, так как не использовал. Но вроде бы остановил дальнейшее развитие.
Думаю, лучше было бы придерживаться официальных библиотек.
Короче, рекомендую использовать cv2!
РЕДАКТИРОВАТЬ: вы можете увидеть процедуру установки cv2
модуля в разделе « Установка OpenCV в Windows для Python» .