opencv作为一个常用帮助我们做哪些操作,跑opencv的硬件

  opencv作为一个常用帮助我们做哪些操作,跑opencv的硬件

  案例一:把自己电脑上可以运行的基于opencv的项目复制到别人(主要是老师)的电脑上,避免别人配置库文件和目录文件以及lib。

  场景二:将自己电脑上可以运行的基于opencv的程序(exe)复制到没有cv库的电脑上进行演示。

  首先展示一下案例一中你的具体配置过程:配置原理见上一篇博文http://blog..net/lanbing510/article/details/8806602.

  将1 opencvbuild目录下的include文件夹和opencvbuildx86vc10下的bin和lib文件夹复制到项目所在的目录(以及C项目或stdafx.h所在的一级目录)。

  2添加一个目录。为了实现第一种情况,需要使用相对路径。第一,你要用相对路径来科普。 代表当前目录,而 。 代表上级目录。注意: 是VC的保留字,所以你写程序的时候应该用 而不是 。网络路径使用“/”。具体配置如下:

  Link的配置和往常一样,只是添加了这些常用的库:

  opencv_nonfree243d.lib

  opencv_legacy243d.lib

  opencv_imgproc243d.lib

  opencv_core243d.lib

  opencv_highgui243d.lib

  opencv_video243d.lib

  opencv_ml243d.lib

  opencv_features2d243d.lib

  编译后把对应的dll文件放到exe所在的目录下,就ok了;但是,如果dll太多,就显得臃肿了。如果你想把DLL文件放在不同的文件夹中,然后让程序运行来选择它们,一种方法是设置环境变量。但是问题来了,你不能告诉老师你可以现场配置环境变量。如果对方没有相应的库,更不用说相应的环境变量了。

  解决方案是进行以下配置(假设dll文件夹bin已经按照步骤1复制到项目目录中):

  也就是在环境选项中设置路径,这样也可以使用多个文件夹中的dll。简洁明了。

  3做好以上配置后,就可以编译运行了。

  二、对第二种情况做一个简单的提示。

  如果对方不需要源代码和项目,只是为了显示,可以直接把bin文件夹复制到exe文件所在的目录下(vs一般会问在debug或者release文件夹下),但是你会发现双击exe并不能正常工作,而是提示你找不到dll。如上所述,不配置环境变量或者不把dll文件放在与exe同一级目录下,就无法运行程序;但如果要做示范,也不能太难看。一个exe附件就是各种dll,很乱。我该怎么办?还有两种方法:

  1批处理法,就是写一个bat,先设置好路径,然后运行你的exe,但是还是不好看,当你运行一个bat文件而不是exe给大家看。

  2详细说说第二种方法。可以写一个shell,用ShellExecute调用exe。简单,简短的命令。

  贴一下我下面写的shell程序。

  #包含Windows.h

  #包括iostream

  使用命名空间std

  # define exename _ T( Motion _ ds . exe )

  #define dllpath _T(。 bin’)

  int _tmain(int argc,_TCHAR* argv[])

  ShellExecute(NULL,NULL,exename,NULL,dllpath,SW _ SHOW);

  接住(.)

  std:cout 中出现异常,请检查源程序 exename STD:endl;

  返回0;

  }

  将编译好的shell.exe放在Motion_DS.exe所在的目录下,将Motion_DS.exe放在bin文件夹下。演示时,只需双击shell.exe。

  Paste ShellExecute的参数说明和常见例子。

  -

  ShellExecute(

  hWnd:hWnd;{指定父窗口句柄}

  操作:PChar{指定操作,例如:打开、打印}

  文件名:PChar{指定要打开的文件或程序}

  参数:PChar{指定要打开的程序的参数;如果文件被打开,这应该是nil}

  目录:PChar{默认目录}

  ShowCmd: Integer {open option}

  ):HINST{成功执行将返回应用程序句柄;如果该值=32,则意味着执行错误}

  //返回值的可能错误有:

  =0 {内存不足}

  ERROR _ FILE _ NOT _ FOUND=2;{文件名错误}

  ERROR _ PATH _ NOT _ FOUND=3;{路径名错误}

  ERROR _ BAD _ FORMAT=11{EXE文件无效}

  SE _ ERR _ SHARE=26{出现共享错误}

  SE _ ERR _ ASSOCINCOMPLETE=27{文件名不完全或无效}

  SE _ ERR _ DDETIMEOUT=28{超时}

  SE _ ERR _ DDEFAIL=29动态数据交换事务失败}

  SE _ ERR _ DDEBUSY=30{正在处理其他动态数据交换事务而不能完成该动态数据交换事务}

  SE _ ERR _ NOASSOC=31{没有相关联的应用程序}

  //ShowCmd参数可选值:

  SW _ HIDE=0;{隐藏}

  SW _ show normal=1;{用最近的大小和位置显示,激活}

  SW _ NORMAL=1;{同SW_SHOWNORMAL}

  SW _ show最小化=2;{最小化,激活}

  SW _ show最大化=3;{最大化,激活}

  SW _ MAXIMIZE=3;{同SW_SHOWMAXIMIZED}

  SW _ showno activate=4;{用最近的大小和位置显示,不激活}

  SW _ SHOW=5;{同SW_SHOWNORMAL}

  SW _ MINIMIZE=6;{最小化,不激活}

  SW _ SHOWMINNOACTIVE=7;{同SW_MINIMIZE}

  SW _ SHOWNA=8;{同SW_SHOWNOACTIVATE}

  SW _ RESTORE=9;{同SW_SHOWNORMAL}

  SW _ SHOWDEFAULT=10{同SW_SHOWNORMAL}

  SW _ MAX=10{同SW_SHOWNORMAL}

  //举例说明更多问题(别忘了使用ShellAPI):

  {譬如用记事本打开一个文件}

  开始

  ShellExecute(Handle, open , notepad.exe , C:WINDOWSSchedLgU .Txt ,nil,SW _ show normal);

  {第一个参数是用来当作错误提示窗口的父窗口的,不能是零,可以是0(也就是桌面窗口)}

  开始

  ShellExecute(0,打开, notepad.exe , C:WINDOWSSchedLgU .Txt ,nil,SW _ show normal);

  {第二个参数如果是零,也会默认位打开}

  开始

  ShellExecute(0,nil, notepad.exe , C:WINDOWSSchedLgU .Txt ,nil,SW _ show normal);

  {文件路径可以放在参数五}

  开始

  ShellExecute(0,nil, notepad.exe , SchedLgU .Txt , C:WINDOWS ,SW _ show normal);

  {把参数三直接指定为要打开的文件,文件将用对应默认程序打开;次数参数四应为nil}

  开始

  ShellExecute(0,nil, SchedLgU . Txt ,nil, C:WINDOWS ,SW _ show normal);

  {如果文件在:程序目录/当前目录/System32/Windows/PATH环境变量中,参数五也可以nil}

  开始

  ShellExecute(0,nil, SchedLgU .Txt ,nil,nil,SW _ show normal);

  {如果参数三是个文件,可以用参数二命令打印}

  开始

  ShellExecute(0, print , SchedLgU .Txt ,nil,nil,1);

  {用工业管理学(工业工程)打开网页}

  开始

  ShellExecute(Handle, open , IExplore .EXE , about:blank ,nil,SW _ show normal);

  {用火狐打开网页}

  开始

  ShellExecute(Handle, open , firefox.exe , about:blank ,nil,SW _ show normal);

  {用默认浏览器打开网页}

  开始

  ShellExecute(Handle, open , Explorer.exe , about:blank ,nil,SW _ show normal);

  {还是用默认浏览器打开网页}

  开始

  ShellExecute(0,nil, http://del..com ,nil,nil,1);

opencv作为一个常用帮助我们做哪些操作,跑opencv的硬件