1

如果我的问题可能太菜鸟或其他问题,我真的很抱歉。但是,我发现自己对 OpenCV 中的一些命令有点困惑。浏览OpenCV 文档后,发现有 cvMemStorage 和 cv::MemStorage、cvMat 和 cv::Mat、cvSeq 和 cv::Seq、cvNormalBayesClassifier 和 cv::NormalBayesClassifier 之类的命令。

那么,这些命令之间有什么区别呢?

它们只是 C 和 C++ 风格之间的不同命令风格吗?

那么为什么他们(OpenCV 团队)在大多数 c 和 c++ 世界中不只使用一种风格呢?

任何帮助和意见将不胜感激。谢谢

4

2 回答 2

2

约定似乎cvSomething是 C 类型或函数,并且cv::Something是相应的 C++ 版本。在 C++ 中,cv是一个namespace.

OpenCV 同时维护 C 和 C++ 接口,这就是您获得这两种变体的原因(还有 python 绑定,这会使一体化文档变得混乱)。

于 2013-04-30T13:56:08.227 回答
0

OpenCV 2.x 版的核心库是用 C++ 编写的。编码约定是将所有内容都放在命名空间中cv。(见这里这里)。

旧的 API(1.x 版)是 C API。约定是添加前缀cv

旧的 1.x API 仍然暴露给客户端代码。通常,您不需要它。(如动态结构的 OpenCV 文档中所述(因为您引用了 cvCreateMemStorage),“如果您使用新的 C++、Python、Java 等接口,则不太可能需要此功能。使用 std::vector 或其他高级数据结构。”)

于 2013-04-30T14:16:37.663 回答