opencv多版本链接兼容

  opencv发展到现在,中间经历了若干版本,保持了向下兼容。实际项目中也不断采用新的版本。

  这就存在一个问题,如何把旧的项目代码中的opencv版本无缝升级到新的版本呢?

  版本的升级主要有三个方面,include、lib、bin。

  在VC环境下:

  1. 关于include,一般是通过修改头文件附加引用目录的方式基本就能解决;

  2. 对于bin,可以直接把新版本的.dll文件复制到运行目录;

  3. 对于lib,和include类似,首先要做的一般也是通过修改库文件附加引用目录,让编译器能够找到新版本的.lib文件,但是还需要在“工程”中修改库的版本,比如当前我用的2.3.1,要升级到2.4.9,就需要把"opencv_highgui231.lib" 替换为 “opencv_highgui249.lib”,这个时候如果用到了宏链接模式,就需要修改代码:

比如:#pragma comment(lib , "opencv_highgui231.lib")

修改为:#pragma comment(lib , "opencv_highgui249.lib")

  经过一段时间的琢磨,终于想到了一种比较好的方式,用于解决opencv多版本兼容,和大家分享一下,请大家批评指正。

  代码如下:

// cv_libs.h: easy way to import opencv libs.
//
//

#ifndef _CV_LIBS_H_
#define _CV_LIBS_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <cv.h> 

#define _CV_STR_EXP(__A)  #__A
#define _CV_STR(__A)      _CV_STR_EXP(__A)

#ifdef _DEBUG
#define _CV_VER          CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
#define _CV_LIB_SUF      "d.lib"
#else
#define _CV_VER          CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
#define _CV_LIB_SUF      ".lib"
#endif // _DEBUG

// opencv 1.x.x
#if(CV_MAJOR_VERSION < 2)
#  pragma comment(lib , "cv" _CV_LIB_SUF)
#  pragma comment(lib , "cvaux" _CV_LIB_SUF)
#  pragma comment(lib , "cvhaartraining" _CV_LIB_SUF)
#  pragma comment(lib , "cxcore" _CV_LIB_SUF)
#  pragma comment(lib , "cxts" _CV_LIB_SUF)
#  pragma comment(lib , "highgui" _CV_LIB_SUF)
#  pragma comment(lib , "ml" _CV_LIB_SUF)
#  ifdef CV_STLIB
#    pragma comment(lib, "libjasper" _CV_LIB_SUF)
#    pragma comment(lib, "libjpeg" _CV_LIB_SUF)
#    pragma comment(lib, "libpng" _CV_LIB_SUF)
#    pragma comment(lib, "libtiff" _CV_LIB_SUF)
#    pragma comment(lib, "zlib" _CV_LIB_SUF)
#    pragma comment(lib ,"comctl32.lib") //Windows
#    pragma comment(lib ,"vfw32.lib")    //Windows
#  endif
#endif

// opencv 2.(0-2).x
#if(CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION < 3)
#  pragma comment(lib , "cv" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "cxcore" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "highgui" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "cvaux" _CV_VER _CV_LIB_SUF)
// static lib
#  ifdef CV_STLIB
#  endif
#endif

// opencv 2.3.x lib
#if(CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 3)
#  pragma comment(lib , "opencv_calib3d" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_contrib" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_core" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_features2d" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_flann" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_gpu" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_haartraining_engine" _CV_LIB_SUF)
#  pragma comment(lib , "opencv_highgui" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_imgproc" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_legacy" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_ml" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_objdetect" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_ts" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_video" _CV_VER _CV_LIB_SUF)
// static lib
#  ifdef CV_STLIB
#  endif
#endif

// opencv 2.4.x lib
#if(CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 4)
#  pragma comment(lib , "opencv_calib3d" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_contrib" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_core" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_features2d" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_flann" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_gpu" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_haartraining_engine" _CV_LIB_SUF)
#  pragma comment(lib , "opencv_highgui" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_imgproc" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_legacy" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_ml" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_nonfree" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_objdetect" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_photo" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_stitching" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_ts" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_video" _CV_VER _CV_LIB_SUF)
#  pragma comment(lib , "opencv_videostab" _CV_VER _CV_LIB_SUF)
// static lib
#  ifdef CV_STLIB
#    pragma comment(lib , "IlmImf" _CV_LIB_SUF)
#    pragma comment(lib , "libjasper" _CV_LIB_SUF)
#    pragma comment(lib , "libjpeg" _CV_LIB_SUF)
#    pragma comment(lib , "libpng" _CV_LIB_SUF)
#    pragma comment(lib , "libtiff" _CV_LIB_SUF)
#    pragma comment(lib , "zlib" _CV_LIB_SUF)
#    pragma comment(lib , "comctl32.lib") //Windows
#    pragma comment(lib , "vfw32.lib")    //Windows
#  endif
#endif

#endif // _CV_LIBS_H_



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值