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

88

Есть

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

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

Framester
источник

Ответы:

138

Официально 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» .

Абид Рахман К.
источник
cv2 Интерфейс Python будет скомпилирован и установлен, если вы собираете OpenCV из исходников. Если вы используете бинарные пакеты для Linux или другой ОС, вам следует обратиться к документации вашей ОС / дистрибутива. См. Помощь на goo.gl/MUjXi .
TH.
1
@Framester: см. Процедуру установки cv2 по этой ссылке: opencvpython.blogspot.in/2012/05/…
Абид Рахман К.
Ответ Абида великолепен. Просто добавлю еще один момент: я создал проект с Python 3.x, и единственный способ получить доступ к opencv был через ctypes_opencv и исходный OpenCV 1.0. Он утверждает, что поддерживает OpenCV pre1.1, но у меня так и не получилось. При этом вы будете использовать оригинальный cvSetROI и т. Д. Интерфейс C-типа.
KobeJohn
Если вы хотите установить его с помощью pip. читайте здесь или делайте:pip install opencv-python
Тимо