Що відрізняється між усіма цими інтерфейсами OpenCV Python?


88

Існує

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

Які основні відмінності і який із них слід використовувати?

Відповіді:


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. Ви можете знайти докладну дискусію про Контури в Контури - 1: Початок роботи .

Коротше кажучи, з cv2 все спрощено і досить швидко.

Просте обговорення того, як прискорюється NumPy cv2, у запитанні щодо переповнення стека Порівняння продуктивності інтерфейсів OpenCV-Python, cv та cv2 .

pyopencv :

Я не знаю багато про це, оскільки я ним не користувався. Але це, здається, зупинило подальший розвиток.

Я думаю, було б краще дотримуватися офіційних бібліотек.

Коротше, я б порадив вам використовувати cv2!

РЕДАГУВАТИ: Ви можете побачити процедуру встановлення cv2модуля в розділі Встановити OpenCV у Windows для Python .


Інтерфейс cv2 Python буде скомпільований та встановлений, якщо ви збираєте OpenCV із джерел. Якщо ви використовуєте двійкові пакети для Linux або іншої ОС, вам слід проконсультуватися з документацією щодо вашої ОС / дистрибутива. Довідку див. У goo.gl/MUjXi .
Ч.

1
@Framester: див. Процедуру встановлення cv2 за цим посиланням: opencvpython.blogspot.in/2012/05/…
Абід Рахман К,

Відповідь Абід чудова. Щоб додати ще один момент: я зробив проект з Python 3.x, і єдиний спосіб отримати доступ до opencv - це через ctypes_opencv та оригінальний OpenCV 1.0. Він заявляє про підтримку OpenCV pre1.1, але я ніколи не працював. При цьому ви будете використовувати оригінальний cvSetROI тощо. Інтерфейс типу C.
KobeJohn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.