На какую версию Python OpenCV я должен пойти? - PullRequest
7 голосов
/ 09 февраля 2010

Успешно установив opencv 2.0 с привязками Python, я начинаю сталкиваться с проблемами, и, прежде чем идти дальше, я подумал, стоит ли переходить на другой вариант. Как езод на этом посте говорит:

"В качестве предупреждения, начиная с версии 2.0, новые привязки Python являются неполными: многие функции, которые я бы посчитал довольно важными, отсутствуют. Между тем, привязки SWIG - не что иное, как агонизирующая работа. Сторонний проект), начиная с версии 0.8.0, не поддерживают OpenCV 2.0. "

Итак, я должен сражаться с 2.0 или идти за ctypes? Что я упускаю в любом случае?

Я использую OSX, python 2.5 и хочу отслеживать 2d движущегося объекта, но не эксперт ни по python, ни по машинному зрению!

Ответы [ 3 ]

3 голосов
/ 13 марта 2012

Поздний ответ. Если вам не нужно зависеть от более ранних версий и вы хотите использовать OpenCV с Python, выберите последнюю стабильную версию. Сегодня это OpenCV 2.3.1.

Основное преимущество OpenCV ≥ 2.3 для пользователей Python : новый модуль cv2 в дополнение к старому (обратно совместимому) cv модулю. Новый модуль cv2 гораздо более питонен и не требует ручного выделения памяти для промежуточных структур данных. Старый cv модуль больше похож на прямой перевод C ++ API.

Например, сравните новый Python cv2.findContours (OpenCV ≥ 2.3):

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

Требуется только три параметра, и он может автоматически обрабатывать все выделения памяти, возвращает только конечный результат. Всего одна строка кода пользователя.

Vs. старый cv.FindContours:

FindContours(image, storage [, mode [, method [, offset]]]) -> None

Требуется, чтобы пользователь явно выделил «хранилище» перед вызовом (+ 1 или 2 строки кода). Он не возвращает результат, вместо этого он сохраняет его в выделенном хранилище (он работает как связанный список, и пользователь должен написать какой-то цикл, чтобы фактически извлечь данные из хранилища). В целом, более низкоуровневый и больше похож на C ++, чем на Python. Как минимум 4-5 строк кода в общем случае использования вместо одной строки с новым модулем cv2.

1 голос
/ 04 марта 2010

Я использую самоскомпилированный OpenCV 2.0 и его встроенную привязку к Python. До сих пор мне не хватало 2 или 3 функций (например, FindFundamentalMat ). Если вы получаете исходный код OpenCV, вы обнаружите текстовый файл interfaces / python / api , который определяет параметры и типы возврата для каждой функции OpenCV, доступной в Python. После перекомпиляции автоматический генератор проанализирует этот файл и создаст расширение python. Для всех случаев, через которые я прошел, я обнаружил, что добавление соответствующего определения к api для необходимых мне функций, а затем перекомпиляция opencv работало довольно хорошо.

0 голосов
/ 03 августа 2010

Я бы порекомендовал вам использовать официальные привязки Python к OpenCV 2.1 , которые, насколько я видел, имеют паритет функций с библиотеками C ++. У большинства из них есть либо python-оболочка, либо прямой перевод с версии C ++.

Документация Python по OpenCV не такая полная, как у C ++, но если вы чувствуете, что преимущества языка для прототипирования того стоят, вы сможете понять использование Python из C ++ документации .

Обратите внимание, что большая часть существующего примера кода, который вы найдете в предыдущих версиях, несовместима (например, теперь все находится в пакете cv), но нетрудно понять, как его обновить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...