Подтвердить что ты не робот

OpenCV 2.4.3 и Python

Несколько дней назад я искал хороший способ создать простую систему компьютерного зрения. Библиотека OpenCV - это то, что мне нужно, но было сложно учиться с Python, особенно после обновления OpenCV 2.4.3, имеющего очень тонкую документацию, связанную с Python. Итак, теперь я понимаю, что в OpenCV произошла куча изменений, для exaxmple

import cv

теперь

import cv2

И есть куча модулей, которые отсутствуют. Я имею в виду, да, есть примеры нового синтаксиса python-opencv, но он очень узкий и, как оказалось, трудно понять. Например: Пример в официальной документации для кода Python

cv2.cvtColor(src, code[, dst[, dstCn]])

Я знаю, что означает этот код и как его использовать, по крайней мере, я думаю, что знаю. Но писать исходный код и цветовой код ничего не дает мне:

    Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')
TypeError: an integer is required

Или, если я пытаюсь написать код как переменную:

Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', CV_RGB2GRAY)
NameError: name 'CV_RGB2GRAY' is not defined

Итак, есть ли справочный документ/учебник/книга/руководство по Python для новейшего OpenCV с объяснениями, которые не путают новичков, подобных мне, с нежелательными примерами кода для С++ или Java?

4b9b3361

Ответ 1

Я думаю, что вы делаете это на обратном пути.

На самом деле, с новым модулем cv2, OpenCV стал намного более простым по сравнению со старым интерфейсом cv. Не просто, но очень быстро и высокопроизводительно, благодаря поддержке Numpy. Дело только в том, что мы должны знать, как правильно использовать его.

Здесь вы должны использовать функцию следующим образом:

img = cv2.imread('pic.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

Я хотел бы, чтобы вы посетили один SOF, который показывает некоторое сравнение между обоими модулями: Чем отличаются все эти интерфейсы OpenCV Python?

Здесь еще один SOF, который является простой демонстрацией того, как вы можете ускорить работу с поддержкой Numpy: Сравнение производительности интерфейсов OpenCV-Python cv и cv2

Вам не нужно изучать С++ или C для использования OpenCV, хотя С++ является официальным языком. Тем не менее, Python-OpenCV имеет хорошую поддержку. Как только вы поймете, как использовать OpenCV, вы сможете конвертировать коды С++ в Python самостоятельно. Затем вы также можете изучить OpenCV из учебников по С++. Например, я начал изучать OpenCV из "Learning OpenCV" Гэри Брэдски, который полностью находится на С++. В то время был только интерфейс cv.

Как вы упомянули в своих комментариях, opencvpython.blogspot.com имеет несколько вводных руководств. Я начал фокусировать новичков в OpenCV.

Кроме того, проверьте этот SOF для получения дополнительных уроков: Книги для OpenCV и Python?

Ответ 2

Сделать это под другим углом и позволить вам запускать старый код с новыми версиями установки OpenCV...

Прежде всего переход от cv к cv2 относится к библиотеке, использующей разные структуры данных для множества функций. Самый простой способ определить, изменилась ли функция между cv2 и cv, состоит в том, что функции cv начинаются с капитала. Переработанные функции cv2, похоже, всегда имеют первую букву в нижнем регистре. Поэтому, если вы используете старую книгу или старые примеры, вы все равно можете использовать устаревшие cv. cv теперь просто вложено в cv2. Просто используйте следующее в верхней части своих скриптов.

    import cv2
    import cv2.cv as cv #required for old code not to be changed

Это позволяет вам просто запускать старый код без его изменения. Здесь я продемонстрирую ваш вызов функции. У вас был...

    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')

Первое, что я замечаю, это то, что ваша функция может быть названа неправильной. (Учитывая, что первая буква функции имеет нижний регистр, она должна начинаться с cv2, а не cv). Второй - это "код", передаваемый функцией. "Коды" - это члены (кодирование noob здесь, простите меня, если какой-то мой vocab неточен) cv2 и cv, но не всегда одинаковый. У вас есть CV_RGB2GRAY. Во-первых, никаких кавычек. Это код cv 'не cv2. Также вам не хватает "cv". спереди. Чтобы продемонстрировать здесь, как я считаю, ваша функция должна быть вызвана для старой версии cv:

    cv.CvtColor('proba.jpg', cv.CV_RGB2GRAY) #Assuming you used listed imports
    cv2.cv.CvtColor('proba.jpg', cv2.cv.CV_RGB2GRAY) #Assuming you skipped second import

И теперь cv2...

    cv2.cvtColor('proba.jpg', cv2.COLOR_RGB2GRAY)

Там вы идете, я надеюсь, что это поможет. Помните, что при запуске сценариев python вы можете вводить все, что вы не уверены, непосредственно в командной строке. Это творит чудеса, помогая мне построить мое понимание (я впервые использовал python 5 дней назад). Например, если вам интересно, почему в вашей функции требуется целое число, когда вы печатаете

    cv.CV_RGB2GRAY

непосредственно в командной строке python, он нажимает на вас "7" (удобный, что это int). Версия cv2 выплевывает "7L". Просто не забудьте использовать функцию WaitKey() снова и снова в той или иной форме, иначе у highgui может не быть необходимого времени для обработки некоторых команд, в некоторых ситуациях. Хорошо, что обертывает его. Извините, если я рассмотрел некоторые вещи, которые уже были охвачены или были упомянуты. Если я не стесняюсь удалить его, администраторы.