Opencv3与Opencv2的区别,及opencv2项目移植到opencv3注意事项

Opencv2标志着opencv革命性的改变,Opencv2带来了全新的C++接口,将Opencv的能力无限放大。在2.0时代,opencv增加了新的平台支持,包括iOS和Android,通过CUDA和openGL实现了GPU加速,为Python和Java用户提供了接口。

Opencv 3改变了项目架构的方式,3.0版本不会像2.0版本一样激进的尝试,只会有足够稳定的改进。项目架构的改变是Opencv 3最为重大的革新之处。2.0版本是各个模块都是以整体的形式构建然后组合在一起的。然而,随着功能的增加,opencv主体集成了各种各样的功能模块,变得越来越臃肿。而3.0版本就是为了给日益发福的opencv减肥,因为Opencv3决定向其他大项目一样,抛弃整体架构,使用内核+插件的架构形式。

在GitHub中,除了存放着正式版本的opencv的主仓库和新增加的“opencv_extra”仓库以外,opencv3中还添加了一个名为“opencv_contrib”的全新仓库,该仓库包括很多让人兴奋的功能:脸部识别,文本探测,文本识别,新的边缘检测器,充满艺术感的图像修复,深度地图处理,新的光流和追踪算法等。

opencv_contrib仓库是大多数实验性代码放置的地方,一些API可能会有改变,这些额外模块可以在CMake中用OPENCV_EXTRA_MODULES_PATH=/modules传递给CMake文件。


opencv2项目移植到opencv3需要注意的一些细节。由于opencv3的主体部分只是在opencv2的基础上进行小幅度的更改,所以opencv2的大部分程序都可以在opencv3上运行。但有些也会报错。

1【由于宏名称的变更造成的“未声明的标识符”系列问题】

有时候,遇到此类问题加入一句“#include<cv.h>”便可以解决。有时会出现“CV_”式的宏前缀命名规范的错误,因为在opencv3对这些前缀为“CV_”的宏使用了新的命名规范。遇到该类问题主要有如下解决方法:1直接去掉"CV_"前缀;2需要新的前缀,例如CV_AA改为LINE_AA;3需要在新的命名中使用宏,例如TermCriteria函数中,CV_TERMCRIT_EPS改为TermCriteria::EPS

2【使用vector容器之时提示"error C2065:"vector":未声明的标识符】

在opencv3的环境下未包含STD命名空间,需要在开头加上一句"using namespace std;"就解决了。

3【其他一些细节问题】

features2d.hpp头文件路径更改。将#include<opencv2/nonfree/features2d.hpp>改为#include<opencv2/features2d.hpp>

core.hpp头文件路径更改。将#include <opencv2/core/core.hpp>改为#include<opencv2/core.hpp>

表示颜色时,将CV_RGB改为Scaler

定义尺寸时,将cvSize(-1,-1)改为Size(-1,-1)

用format进行格式化输出时,将format(r,"python")改为format(r,Formatter::FMT_PYTHON)

猜你喜欢

转载自blog.csdn.net/yangxueyangxue/article/details/80776255