您的位置:首页 > 运维架构

实现自动识别OpenCV的版本号

2014-01-07 17:25 603 查看
当每次下载OpenCV的新版本时,都需要重新写头文件,更改链接库配置,有点麻烦。所以,我们可以利用OpenCV的版本信息定义了一个宏,无论Opencv是220还是246都能够支持(本人测试过OpenCV2.2.0和OpenCV2.4.6),这样,可以再不用担心更新版本带来的问题了.在此帖出自动判断识别OpenCV的版本号,并据此添加对应的依赖库(.lib文件)方法头文件的代码,与大家分享。
#include <opencv2/opencv.hpp>

#define CV_VERSION_ID CVAUX_STR(CV_MAJOR_VERSION) \
CVAUX_STR(CV_MINOR_VERSION) \
CVAUX_STR(CV_SUBMINOR_VERSION)

#ifdef _DEBUG
#define cvLIB(name) "opencv_" name CV_VERSION_ID "d"
#else
#define cvLIB(name) "opencv_" name CV_VERSION_ID
#endif

#pragma comment( lib, cvLIB("core") )
#pragma comment( lib, cvLIB("imgproc") )
#pragma comment( lib, cvLIB("highgui") )
#pragma comment( lib, cvLIB("flann") )
#pragma comment( lib, cvLIB("features2d") )
#pragma comment( lib, cvLIB("calib3d") )
#pragma comment( lib, cvLIB("gpu") )
#pragma comment( lib, cvLIB("legacy") )
#pragma comment( lib, cvLIB("ml") )
#pragma comment( lib, cvLIB("objdetect") )
#pragma comment( lib, cvLIB("ts") )
#pragma comment( lib, cvLIB("video") )
#pragma comment( lib, cvLIB("contrib") )
#pragma comment( lib, cvLIB("nonfree") )
注:对于比较老的OpenCV版本,可能有个别lib的名称不对,修改一下就可以了。
这里首先是通过OpenCV的version.hpp文件获取版本号,然后将CV_MAJOR_VERSION、CV_MINOR_VERSION、CV_SUBMINOR_VERSION三个版本号数字串接成一个字符串CV_VERSION_ID。然后,根据OpenCV的lib文件的命名规则和当前的编译环境(debug或release)来定义一个命名lib文件的宏 cvLIB。最后,通过 #pragma comment ( lib, * ) 指令来添加所需的依赖库。

上面这种方法的便捷性在于,我们只需要指定依赖库的名称,通过所定义的宏就可以自动生成和添加与你所安装的OpenCV版本相对应的依赖库;并且将来升级OpenCV时,除非新版本的依赖库命名规则发生改变,否则就不需要再改动代码,程序会自动判断OpenCV的版本并找到对应的依赖库。

关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OpenCV 头文件