让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拷贝至工程目录下编译和运行。
一种是动态链接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拷贝至工程目录下编译和运行。
相关文章推荐
- DHCP Snooping,Dynamic ARP Inspection实现
- Ubuntu Linux 环境变量PATH设置
- linux系统的基本优化
- 运维几个点
- linux下解压命令大全
- 通过rsync+inotify实现数据的实时备份
- MFC 监控界面上所有文本框值的变化
- MFC 监控界面上所有文本框值的变化
- 教你如何监控你的妹子或者将来的妹子的手机
- HP Designjet 800PS 日常维护
- 高手
- 购物网站核心代码_文件上传_发送邮件_购物车设计_在线支付
- linux就是这个范儿之融于心而表于行(2)
- shell 抓取网页解析网页 自动读取poj测试数据——V2生成 pku poj acm编程模版
- 国外知名IT网站Stackoverflow评选的最有影响力IT图书
- mini2440 usb device controller 驱动的分析--gadget设备(二)---枚举
- Understanding Unix/Linux Programming note:chapter 1:more函数的流程图
- apache ssl
- Tomcat集群Tomcat负载均衡配置
- Linux多网卡负载均衡主备bonding技术实践教程