欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

openvc学习笔记(4)——两种方法在没有环境下运行程序

发布时间:2024/4/15 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 openvc学习笔记(4)——两种方法在没有环境下运行程序 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

参考博客:http://blog.csdn.net/xiaowei_cqu/article/details/8066329

OpenCV的安装总结

我们下载的OpenCV安装包一般包括源码,示例,文档和编译好的动态链接库

 

我们写代码如果调用OpenCV的函数,必须对所用的vc需要添加附加依赖项:(我用的vs2008,vs2010可能不一样)

第一步:配置include路径

“工具”->“选项”->“项目和解决方案”->“VC++目录”

->“包含文件”,

Include Directories :C:\OpenCV\OpenCV-2.4.2\build\include

即告诉VC去什么地方寻找OpenCV的头文件,打开VC

第二步:配置lib路径

->“库文件”

Library Diractories:C:\OpenCV\OpenCV-2.4.2\build\x86\vc10\lib

即告诉VC去什么地方寻找OpenCV的库文件

第三步:设置环境变量

两个bin文件夹: C:\OpenCV\OpenCV-2.4.2\build\x86\vc10\bin C:\OpenCV\OpenCV-2.4.2\build\common\tbb\ia32\vc10 添加到系统环境目录

第四步:附加依赖项

然后还需要在Linker->Input->Additional Dependencies

里添加会用到的各种XX.lib,XXd.lib

还有把 有的安装教程里还会教我们在Source Directories添加OpenCV的源码文件,

关于简化以上几步

第一步、第二部是默认配置设置一次即可

第二部可以在代码中加入

#pragma  comment(lib,"cxcore200d.lib")
#pragma  comment(lib,"cv200d.lib")
#pragma  comment(lib,"highgui200d.lib")

就不用再添加了

 

 

其实是不需要的。因为实际调用OpenCV里的函数是用的dll的隐式调用方式。

DLL调用

隐式调用一般需要:

声明函数接口的.h文件——include文件夹里的内容

链接动态库的.lib文件——lib文件夹里的内容以及Input->Additional Dependencies添加的XX.lib

动态链接库.dll文件——bin文件夹的内容 这里bin文件夹是在系统环境目录里的,所以执行代码是exe文件可以找到。

也可以添加在系统文件中,把需要用到的dll拷贝到exe同一个文件夹下即可。

所以,如果把未发布的工程拷贝到没有opencv的电脑上,只要把需要用的函数相关的.h,.lib以及.dll文件考过去即可。

 

另一种调用dll的方式是显示调用:

显示调用是不需要.lib和.h文件的,只会用到dll文件。

但需要在代码里“显示”加载要用到的函数。例如:

[cpp]
  • HINSTANCE hDLL=NULL;//生命DLL句柄    
  • hDLL=LoadLibrary("opencv_core242d.dll");  //加载DLL  
  • HMAT myImread=(HMAT)GetProcAddress(hDLL,"imread");  //使用DLL中的函数 
  • 这样在拷贝工程时只拷贝用到的DLL文件就可以。

    但这样代码写得很麻烦,DLL换个名字版本之类的要改很多地方,一般用得不多。

     

    静态编译的exe程序

    如果只是给别人静态链接的exe程序,比如一个demo,不用跑程序。

    最常用的方法就是一起拷贝exe和dll文件到目标电脑: 也就是将需要用到的dll文件拷到exe文件夹下即可,Release拷贝XX.dll,Debug版本拷贝XXd.dll (所以我们写Additional Dependencies不用到的尽量不写,这样拷的dll会少一些~)

    再一种方法就是把OpenCV的源码一起编译到可执行文件中。

    这种需要在写代码时把OpenCV的源文件加入到工程中。也就是用到的.cpp文件目录添加到Source Directories项中。 编译头文件可能会遇到"找不到文件结尾”之类的错误,在项目属性Category中选择"Precompiled Headers"和"Not using precompiled headers"即可。

    这样工程不是调用的OpenCV编译过的dll文件,而是把OpenCV当成你自己写的文件一样一起编译。

    在没有安装OpenCV的电脑上只用拷贝最终的exe文件即可。不需要dll文件,只是生成的exe会比较大~

    转载于:https://www.cnblogs.com/happycaoyue/archive/2013/04/09/3010578.html

    总结

    以上是生活随笔为你收集整理的openvc学习笔记(4)——两种方法在没有环境下运行程序的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。