2013-04-30 3 views
1

Мне очень жаль, если мой вопрос может быть слишком нубом или чем-то еще. Но, я нахожу себя немного немного запутанным между некоторыми командами, найденными в OpenCV. После просмотра the OpenCV documentation я обнаружил, что есть команды типа cvMemStorage и cv :: MemStorage, cvMat и cv :: Mat, cvSeq и cv :: Seq, cvNormalBayesClassifier и cv :: NormalBayesClassifier.Каковы различия в некоторых командах OpenCV?

Итак, каковы различия между этими командами?

Являются ли они просто отличным стилем команд между стилями C и C++?

Так почему же они (команда OpenCV) просто используют один стиль в большинстве стран мира c и C++?

Любая помощь и комментарии были бы очень оценены. Спасибо

+0

Самая важная причина - обратная совместимость, клиенты будут ненавидеть вас, если вы нарушите их коды. Независимо от того, придерживайтесь стиля api C++, если ваша целевая платформа поддерживает приличный компилятор C++, это избавит вас от множества проблем. – StereoMatching

+0

Из учебника openCV «Основной недостаток интерфейса C++ заключается в том, что многие встроенные системы разработки на данный момент поддерживают только C. Поэтому, если вы не нацеливаете встроенные платформы, нет смысла использовать старые методы (если вы не используете мазохист-программист, и вы просите о неприятностях). docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html#matthebasicimagecontainer – StereoMatching

ответ

2

Соглашение похоже, что cvSomething является C-типом или функцией, а cv::Something является соответствующей версией на C++. В C++ cv - это namespace.

OpenCV поддерживает как C, так и C++-интерфейсы, поэтому вы получаете оба варианта (есть также привязки python, которые могут привести к запутыванию документации «все-в-одном»).

+0

Итак, это просто другой стиль для C и C++ версии? Я прав? Знаете ли вы эквивалентную версию C++ для cvCreateMemStorage и cvCreateSeq? – anarchy99

+0

@ hxr99 это не просто другой стиль. Версии 'cv ::' являются действительными функциями anf C++. Довольно часто это обертки, которые используют C API под капотом. Я не уверен в этих двух функциях, о которых вы говорите. – juanchopanza

0

Основная библиотека OpenCV версии 2.x написана на C++. Соглашение о кодировании должно содержать все в пространстве имен cv. (См. here или here).

Старый API (версия 1.x) был C API. Соглашение состояло в том, чтобы добавить префикс cv.

Старый API 1.x по-прежнему открыт для кода клиента. Обычно вам это не понадобится. (Как указано в документации OpenCV для Dynamic structure (поскольку вы ссылались на cvCreateMemStorage), «если вы используете новый интерфейс C++, Python, Java и т. Д., Вам вряд ли понадобится эта функциональность. Используйте std :: vector или другие высокоуровневые структуры данных . »)

Смежные вопросы