当每次下载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.