man*_*ans 8 c++ opencv opencv3.0
我的库目前使用的是OpenCV 2.现在,我正在尝试编译库以使用OpenCV 3.似乎有些头文件被移动而一些常量被重命名.例如,CV_INTER_LINEAROpenCV 3中未定义.
由于我的库需要在OpenCV 2和3上编译和运行,有没有简单的方法来克服这种不兼容性?
我可以更改我的代码,但它在OpenCV 2中不起作用.
编辑: - 阅读安东尼奥的回答.您可以包含兼容性标头types_c.h(1)并使用在OpenCV 3中也可以使用的OpenCV 2常量名称.这是因为,即使常数名称不同(例如INTER_LINEARvs CV_INTER_LINEAR),常数值保持不变(2).因此,接受整数const值的函数在OpenCV 2和3中的行为应该没有区别.对于其他常量也是如此.这样,您只需更改OpenCV 2和3之间的标头路径.
老答: - 这是不可能的.OpenCV 3并不完全向后兼容OpenCV 2.您必须在OpenCV 2和3之间更改枚举,标题路径等.有关向后兼容性的部分,请参阅Changelog(3).
您可以尝试复制标题,给出数字而不是常量名称,使用#ifdefs整个代码 - 但迟早会失败.我建议保留单独的副本,让您高枕无忧.除非我目前正在制作,否则我宁愿完全忽略OpenCV 2.
几个月前我遇到了同样的问题,我不得不反对Kiran:我得到了一个相对较大的项目来构建OpenCv 2和3.在项目过渡阶段,能够用2和3构建是非常重要的,特别是因为OpenCV 3还没有稳定版本,但却具有惊人的优化功能.
cv::INTER_LINEAR在OpenCV 2(标题imgproc/imgproc.hpp)和3中都没有定义?你必须更换一些常量名称,添加几个包含,但这不会太难.
关于头部包含,有一种方法可以找到兼容Opencv2和3的包含路径.
在OpenCV 3中我们写
Run Code Online (Sandbox Code Playgroud)#include "opencv2/core.hpp"代替
Run Code Online (Sandbox Code Playgroud)#include "opencv2/core/core.hpp"旧方法也应该有效.
更新
在新的Release Candidate中,据报道他们已经改善了OpenCV 2.4和3.x之间的兼容性
改进了与OpenCV 2.4的兼容性:
- 2.4.11除标准"opencv2/core/core.hpp"外,现在还包括"opencv2/core.hpp"和其他此类标题.
- 智能指针(Ptr <>)现在可以用2.4和3.0样式创建(新的ClassName(params)vs makePtr(params))
- 现在可以通过opencv_ml 3.0按原样加载和使用来自opencv_ml 2.4的训练和存储的stat模型.
- 已经草拟了2.4 => 3.0过渡指南:http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html
| 归档时间: |
|
| 查看次数: |
7335 次 |
| 最近记录: |