Есть
-
opencv
(библиотека от парней OpenCV), -
cv
(старая библиотека от парней OpenCV) и -
pyopencv
со своим предшественникомctypes-opencv
.
В чем основные отличия и какой из них я должен использовать?
Есть
opencv
(библиотека от парней OpenCV),cv
(старая библиотека от парней OpenCV) иpyopencv
со своим предшественником ctypes-opencv
.В чем основные отличия и какой из них я должен использовать?
Официально 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.