经常需要把用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拷贝至工程目录下编译和运行。

让opencv程序在没有安装opencv的电脑上运行的更多相关文章

  1. 关于C++编译的程序无法在新一台电脑上运行总结

    最近在调用一个SDK调试一个主板的DPIO. 可是编译好的程序在开发电脑上运行没问题,到了新主板建立的电脑系统上就出问题. 总结了下要注意一下几方面. 1:程序本身要没有问题.至少在开发电脑系统环境下 ...

  2. 【OpenCV第一篇】安装OpenCV

    [OpenCV第一篇]安装OpenCV 本篇主要介绍如何下载OpenCV安装程序,如何在VS2008下安装配置OpenCV,文章最后还介绍了一个使用OpenCV的简单小例子. <OpenCV入门 ...

  3. 如何在其他电脑上运行VS2005编译的DEBUG版应用程序

    做项目的过程中,遇到这样的问题:在自己的电脑上用VS2005编译好的DEBUG版程序在其它的没有安装VS2005的电脑上没有办法运行,郁闷至极啊. 直 接拷贝文件后,错误信息如下:"This ...

  4. 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行

    今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...

  5. OpenCV 学习笔记 01 安装OpenCV及相关依赖库

    本次学习是基于Window10进行的.语言为python3. 1 与opencv相关的库简介 1.1 numpy numpy 是 OpenCV 绑定 python 时所依赖的库,此意味着numpy在安 ...

  6. 如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件

    项目基本算法已经完成,甲方需要一个可以运行的demo.目前,程序能在自己的电脑上正常运行.移植到其他win7系统上,运行失败. 寻找各种解决办法,baidu找到两个办法: 1.使用静态链接的方法,这种 ...

  7. 史上最详细版!java文件打包成exe,在未配置安装JDK和未配置的电脑上运行--转载

    原文地址:http://funine.iteye.com/blog/2220359 (本文所有素材将在文章最后附上) 准备工具exe4j, converticon.com(用于制做.ico格式的图片) ...

  8. VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序

    经过一番查找,最给力的参考是 http://www.cnblogs.com/visoeclipse/archive/2010/02/27/1674866.html ------------------ ...

  9. 【Qt开发】【Linux开发】Qt程序在嵌入式设备(arm) 上运行,鼠标擦除界面的解决方案

    笔者最近想在arm开发板上,开发一个应用程序,经过网上查询发现qt作为跨平台开发软件很不错,于是便选择了qt开发,笔者的qt版本是4.8.6的.由于arm的主频太低,在arm上进行开发编译,效率会大大 ...

随机推荐

  1. [struts2学习笔记] 第五节 编写struts2的action代码

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40479299 官方文档: http://struts.apache.org/relea ...

  2. Effective C++ ——构造/析构/赋值运算符

    条款五:了解C++默认编写并调用那些函数 是否存在空的类? 假设定义类为class Empty{}:当C++编译器处理过后会变成如下的形式: class Empty{ Empty(){} ~Empty ...

  3. 【Netty源码学习】BootStrap

    BootStrap是客户端的启动类,其主要功能就是设置必要的参数然后启动客户端. 实现如下: Bootstrap b = new Bootstrap(); b.group(group) .channe ...

  4. [shiro学习笔记]第一节 使用eclipse/myeclipse搭建一个shiro程序

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39519509 shiro官网:http://shiro.apache.org/ shi ...

  5. SpringMVC源码分析--容器初始化(五)DispatcherServlet

    上一篇博客SpringMVC源码分析--容器初始化(四)FrameworkServlet我们已经了解到了SpringMVC容器的初始化,SpringMVC对容器初始化后会进行一系列的其他属性的初始化操 ...

  6. Latex 表格内文字过长自动换行

    法一: [plain] view plaincopy \begin{tabular}{m{5cm}} 法二: [plain] view plaincopy \begin{tabular}{p{0.9\ ...

  7. Hadoop的运行痕迹

    http://www.cnblogs.com/forfuture1978/archive/2010/11/23/1884967.html 一篇讲的很好的 hadoop 基本运行环境配置信息

  8. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  9. iOS中 自定义系统相机 作者:韩俊强

    需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...

  10. LCD正向扫描和反向扫描

    LCD正向扫描和反向扫描 LCD扫描一般分正向扫面和反向扫描,分别针对正装和倒装结构(如下): 有时候提到长边扫描和短边扫描应该是针对横屏和竖屏的设置,大部分显示屏是正向扫描,是否都支持,和玻璃有关, ...