Opencv、OpenCV2.x、Opencv3.x个版本的进化,与VS各个版本的匹配问题

首相声明,本文章借鉴了其他文章,会给与文章链接。
1.opencv 与opencv2.x版本

Opencv1.0版本于2006年面世,主要基于C语言。2009年发布opencv2,主要基于C++。此时OpenCV库被划分成多个模块,这些模块被编译成库文件后,位于lib文件夹中。主要有以下模块(版本1的结构见我的这篇blog:http://blog.csdn.net/lu597203933/article/details/13614377):

Opencv_core模块:包含核心功能,尤其是底层数据结构和算法函数。

Opencv_improc模块:包含图像处理函数。

Opencv_highgui模块:包含读写图像及视频的函数,以及操作图形用户界面函数。

Opencv_features2d模块:包含兴趣点检测子,描述子以及兴趣点匹配框架。

Opencv_calib3d模块:包含相机标定,双目几何估计以及立体视觉函数。

Opencv_video模块:包含运动估算,特征跟踪以及前景提取函数与类。

Opencv_objdetect模块:包括物体检测函数,如脸部和行人检测。

库中还包含其它的工具模块,如机器学习(opencv_ml),计算几何(opencv_flann),第三方代码(opencv_contrib)等。这些模块都对有一个单独的头文件(位于include文件夹)。推荐的声明方式如下:

#include<opencv2\core\core.hpp>

#include<opencv2\highgui\highgui.hpp>

#include<opencv2\imgproc\imgproc.hpp>

而#include "cv.h"这是旧的代码方式,那是库还没有被划分为模块。

文章链接:https://blog.csdn.net/scutjy2015/article/details/72881361
2.opencv2.x与opencv3.x

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)
原文转载地址:https://blog.csdn.net/yangxueyangxue/article/details/80776255。
3.VS各个版本与opencv版本匹配问题

关于opencv,我们从opencv2.x开始说明,因为一代版本使用范围有限,网上基本上都是2.0以上的版本、

VC6.0  vs2005 vs2008其实都需要经过cmake这一个步骤,将opencv编译之后找到相应的库文件,有如下关系:

opencv 2.3 == vc9

opencv 2.4.10 == vc10、vc11、vc12
opencv 2.4.13 == vc11、vc12
opencv 3.4.0 == vc14、vc15
opencv 3.4.1 == vc14、vc15

关于vs版本对应问题可以参考文章:https://blog.csdn.net/ljsant/article/details/75221118。

对应版本说明。在该文件夹下不需要Cmake编译,直接从里面就可以添加相应的库文件,头已经可编译的文件,如果opencv版本下没有对应的VC版本则需要通过如下方法(以vs2005来举例):

可以参考文章:https://blog.csdn.net/blckriver/article/details/81348116。

1、Visual Studio 2005

2、OpenCV-2.4.7

3、cmake-3.4.1-win32-x86 (一般情况下Cmake工具版本要比opencv版本高,理论上可以编译各种版本的opencv  根据项目实际需要来配置。CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。(参考https://baike.baidu.com/item/cmake/7138032?fr=aladdin))。

Cmake官网地址:https://cmake.org/download/。各种版本都有。
---------------------  
作者:疯狂的挖掘机  
来源:CSDN  
原文:https://blog.csdn.net/ljsant/article/details/88421242  
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/a8039974/article/details/88836666
今日推荐