![]() |
OpenCV 4.10.0
开源计算机视觉
|
上一教程: 为 OpenCV 编写文档
下一教程: 从其他 Doxygen 项目对 OpenCV 进行交叉引用
| 原作者 | Maksim Shabunin |
| 兼容性 | OpenCV >= 3.0 |
此文档面向希望将其代码迁移到 OpenCV 3.0 的软件开发人员。
与 2.4 版相比,OpenCV 3.0 引入了许多新的算法和功能。一些模块已重写,一些已被重组。虽然 2.4 中的大多数算法仍然存在,但接口可能有所不同。
本节描述了一般情况下最显着的变更,文档下一部分提供了所有详情和过渡操作示例。
https://github.com/opencv/opencv_contrib
这是对所有新的、实验性和非免费算法的存储。与主要存储库相比,它没有受到支持团队的大量关注,但是社区努力将其保持良好状态。
要使用 contrib 存储库构建 OpenCV,请向你的 cmake 命令中添加以下选项
在 2.4 中,所有标头都位于相应的模块子文件夹中 (opencv2/<module>/<module>.hpp),在 3.0 中,有顶层模块标头,其中包含了该模块的大部分功能:opencv2/<module>.hpp,并且所有 C 样式 API 定义都已移入单独的标头 (例如 opencv2/core/core_c.h)。
通用算法使用模式已更改:现在它必须在堆上创建并封装在智能指针 cv::Ptr 中。2.4 版允许堆栈分配和堆分配,可以直接分配或通过智能指针分配。
从 cv::Algorithm 类中删除了 get 和 set 方法以及 CV_INIT_ALGORITHM 宏。在 3.0 中,所有属性都已转换为 getProperty/setProperty 纯虚方法对。因此,无法通过名称创建和使用 cv::Algorithm 实例(使用通用 Algorithm::create(String) 方法),应该明确调用相应的工厂方法。
本节描述了具体的操作并给出了示例。
在最新版 2.4.11 OpenCV 中进行的某些更改可让您准备当前代码库进行迁移
注意:OpenCV 3.0 中对轻松迁移进行了优化,因此以下说明不是必需的,但建议使用。
initModule_<moduleName>() 调用由于该模型经过重写,因此将软件改编到新模型中需要费一番功夫。所有算法与其基本类StatModel一起位于单独的ml命名空间中。单独的SomeAlgoParams类已被一套相应的getProperty/setProperty方法取代。
下表展示了2.4和3.0机器学习类的对应关系。
| 2.4 | 3.0 |
|---|---|
| CvStatModel | cv::ml::StatModel |
| CvNormalBayesClassifier | cv::ml::NormalBayesClassifier |
| CvKNearest | cv::ml::KNearest |
| CvSVM | cv::ml::SVM |
| CvDTree | cv::ml::DTrees |
| CvBoost | cv::ml::Boost |
| CvGBTrees | 未实现 |
| CvRTrees | cv::ml::RTrees |
| CvERTrees | 未实现 |
| EM | cv::ml::EM |
| CvANN_MLP | cv::ml::ANN_MLP |
| 未实现 | cv::ml::LogisticRegression |
| CvMLData | cv::ml::TrainData |
尽管在3.0中,重写的ml算法允许您从xml/yml文件中加载旧的训练模型,但预测过程中还是存在偏差。
从points_classifier.cpp示例中获取的以下代码段说明了模型训练过程中的差异:
某些算法(FREAK、BRIEF、SIFT、SURF)已移动到opencv_contrib存储库中的xfeatures2d模块、xfeatures2d命名空间。它们的接口也已更改(继承自cv::Feature2D基类)。
xfeatures2d模块类的列表
需要执行以下步骤
opencv2/xfeatures2d.h头文件xfeatures2ddetect、compute或detectAndCompute替换operator()调用现在某些类使用由Feature2D基类提供的通用方法detect、compute或detectAndCompute,而不是自定义operator()
以下代码片段说明了差异(来自video_homography.cpp示例)
所有专门的ocl实现已隐藏在通用 C++ 算法界面之后。现在可以动态选择函数执行路径:CPU 或 OpenCL;这种机制也称为“透明 API”。
新类cv::UMat旨在以合适的方式隐藏与 OpenCL 设备的数据交换。
以下示例说明了 API 修改(来自OpenCV 站点)
CUDA 模块已移至 opencv_contrib 代码库。
文档已转换为 Doxygen 格式。您可以在教程部分中找到更新的文档编写指南。OpenCV 参考文档 (为 OpenCV 编写文档)。
某些情况下,可以支持两个版本的 OpenCV。
若要检查应用程序源代码中的库主版本,应使用以下方法
通过在构建系统中检查库版本,可以链接不同的模块或启用/禁用应用程序中的某些功能。为此,可以使用标准 cmake 或 pkg-config 变量
OpenCV_VERSION 将包含完整版本:例如“2.4.11”或“3.0.0”OpenCV_VERSION_MAJOR 将只包含主版本号:2 或 3版本示例
1.9.8 于 2024 年 6 月 2 日星期日 21:52:14 为 OpenCV 生成的