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);