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

让opencv程序在没有安装opencv的电脑上运行

2013-10-14 23:40 791 查看
  经常需要把用opencv写的程序拿到没有装opencv的电脑上去运行和演示,要让opencv程序脱离opencv环境,一般有两种方法:

  一种是动态链接opencv,即把相应的dll拷贝到exe所在目录,然后一起拿到目标电脑上去运行;另一种是将相应dll中的函数打包进exe,然后直接拷贝exe到目标电脑上去运行,即静态编译。

  这里以VS2008+opencv2.4.6编写的win32控制台程序为例介绍静态编译的步骤:

  1. 将opencv安装目录\build下的include文件夹拷贝到当前工程目录下,重命名为opencv_include;

  2. 将opencv安装目录\build\x86\vc9下的staticlib文件夹拷贝到当前工程目录下,重命名为opencv_lib;

  


  3. 在VS左侧的目录树中右键项目名称,选择“属性”,在“配置属性”->“C/C++”->“常规”->“附加包含目录”中添加opencv_include目录。

  


  4. 在“连接器”->“输入”->“附加依赖项”里添加相应的lib文件,debug版添加带d的lib,release版添加不带d的lib。

  

 

  //win32控制台程序需要的lib
  vfw32.lib
  comctl32.lib

  //opencv用到的第三方lib
  .\opencv_lib\libjasperd.lib
  .\opencv_lib\libjpegd.lib
  .\opencv_lib\libpngd.lib
  .\opencv_lib\libtiffd.lib
.\opencv_lib\zlibd.lib

  //opencv各模块的lib
  .\opencv_lib\opencv_calib3d246d.lib
  .\opencv_lib\opencv_contrib246d.lib
  .\opencv_lib\opencv_core246d.lib
  .\opencv_lib\opencv_features2d246d.lib
  .\opencv_lib\opencv_flann246d.lib
  .\opencv_lib\opencv_gpu246d.lib
  .\opencv_lib\opencv_haartraining_engined.lib
  .\opencv_lib\opencv_highgui246d.lib
  .\opencv_lib\opencv_imgproc246d.lib
  .\opencv_lib\opencv_legacy246d.lib
  .\opencv_lib\opencv_ml246d.lib
  .\opencv_lib\opencv_nonfree246d.lib
  .\opencv_lib\opencv_objdetect246d.lib
  .\opencv_lib\opencv_photo246d.lib
  .\opencv_lib\opencv_stitching246d.lib
  .\opencv_lib\opencv_ts246d.lib
  .\opencv_lib\opencv_video246d.lib
  .\opencv_lib\opencv_videostab246d.lib

   5. 在“C/C++”->“代码生成”->“运行时库”中,debug版选择MTd,release版选择MT。

  


  以上设置完成后,编译即可。

  PS:

  1. 通常include和lib还可以在VS2008的“工具”->“选项”->“项目和解决方案”->“VC++目录”的“包含文件”中进行设置,但这样的设置是保存在VS2008中,而不是当前工程中,如果将整个工程拷贝到别的电脑上,还需要再次设置才能正确编译。而这里介绍的方式则不用再配置,可以直接修改和编译。

  2. 这里使用了相对路径,其中“.”表示当前目录,“..”表示当前目录的上级目录。

  3. opencv早一点的版本中可能并没有包含已经编译好的lib,所以需要自己编译。

  4. 在使用opencv读avi文件时,发现cvCreateFileCapture总是返回空指针,研究半天才发现是因为opencv_ffmpeg.dll没有正确加载。opencv_ffmpeg.dll并没有相应的lib,所以仍然需要将该dll拷贝至工程目录下编译和运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: