您的位置:首页 > 其它

新版的用户手册,有问题的可以看看,没说到的可以回帖提问

2005-06-22 16:07 162 查看

CMECom 1.0 alpha用户使用手册

安装:
演示程序编译于VC++6.0下,在编译前须注册CMECom.dll,可运行bin\setup.bat。

开发环境:
CMECom及其Demo均在VC++6.0、DirectX SDK9.0下开发,操作系统为一台Win2K sp1和一台Winxp sp1。
CMECom可以在MFC、Win32SDK下使用。

Bug List:
Demo_v1和demo_v2由于错误的支持了automation,所以需要在本地编译才能运行。
CMEGame和CMEGame_v1均是Win32sdk+directdraw的方式进行开发,调用了新版本的CMECom,有些接口被改了,与前面的demo不兼容。L
CMEGame_v?各版本的效率均未达到最优化,在后期我会为开发人员提供技术支持,以帮助发挥CMECom的最大性能,充分发挥其潜力。
CMECom的最新版本的Flip功能还存在微小缺陷,主要是有一行一列的画面有错误,会尽快修正。
CMECom的容错性还有待提高。

开发建议:
1.初始化时调用StartPreview函数的返回值可以判断摄像头是否正确连接。S_OK表示正常,其他值则存在错误。
2.每次判断前必须调用Update,如忘记调用则会出现没有画面、或者判断错误等问题。
3.Sensitiveness值与效率有关,数值越大,速度越慢,其实际的效果是调整数值可以忽略低于某一移动速度的物体,也就是说数值提高后,只会对运动快的物体敏感。
4.Tolerant的数值并不会影响速度,但是数值过小会对环境变化很敏感,数值过大会丢失掉一些物体的移动信息。比如在光照强烈时,数值过小会引起误操作,在运动物体和背景颜色接近时,数值过大会引起判断失误。但是由于算法的抗干扰性较强(特殊处理过了)J,推荐实际设定值在20-60以内,可以满足大多数环境要求。另外可以适当配合Sensitiveness参数使用,比如降低Tloerant,提高Sensitiveness可以在某些环境下达到不错的效果。
5.TouchRect的效率还是比较高的,可以放心的多次调用,另外最后的那个count参数会影响性能,数值越大效率越低,不过影响的程序不严重。另外count值不能超过矩形面积。Count值小则灵敏度高,大则抗干扰性好。一般建议1就可以了。
6.AlphaDrawImage的效率实在是低L,这个没什么好的解决方法。在CMEGame里面提供了另一个Alpha Blend函数,虽然没有缩放功能,混合度也不是任意的,不过还是强烈推荐那个,速度快啊!
7.Flip功能也影响性能,但是考虑到操作习惯,还是默认打开此项功能。你可以通过设定Flip = FALSE来关闭此功能。

SDK使用方法概述:
CMECom 1.0 alpha为Com封装,使用方法同一般Com库。
在MFC下可以使用classwiard中automation,add class, from a type library,选择CMECom.tlb
ICMEngine m_CME;
在初始化中调用:
m_CME.CreateDispatch("CMECom.CMEngine");
m_CME.SetTolerant(20); //设定容差,一般在20-100就可
m_CME.SetSensitiveness(1); //设定灵敏度,一般在1-5之间
然后调用:
m_CME.StartPreview(NULL);
每次判断前应调用:
m_CME.Update();
提供的方法有:
1.判断是否触摸到某个矩形
前面一个是要判断的触摸范围,后面是整个画面的边框,result为结果,0为触摸到,非0则未触摸到
m_CME.TouchRect(rc.left, rc.top, rc.right, rc.bottom,
rcDest.left, rcDest.top, rcDest.right, rcDest.bottom, 1, &result);
2.绘制采集到的图像
m_CME.DrawImage((long)mdc, rc.left, rc.top, rc.right, rc.bottom);
3.获得活动点坐标
m_CME.GetLocation(&x, &y, 0);

各方法具体使用详见示例程序。

CMECom属性:
Tolerant——当背景与活动物体之间颜色反差较小时,需把此值设定为一较小的值,以将活动物体从背景中分离出来。当颜色反差较大时,可将此值设的较高,此时可减少误判率。

Sensitiveness——对活动物体的敏感度,数值越大,对慢速运动的物体越不敏感。此数值影响到运算速度,数值越大运算速度越慢。请慎重使用,可根据机器配置的不同设定不同的值。

Flip——是否将画面进行镜像处理。默认为TRUE,此时画面的方向与实际一致,不会产生镜像效果。

CMECom方法:
StartPreview(Long hWnd)——启动摄像头设备。
hWnd:设定要显示预览的窗口,速度较快,但是此窗口无法正常绘制其他图形。如传入参数NULL,则不显示。

Update(void)——重新捕捉画面并完成相应的计算,在每次调用TouchRect、GetLocation等函数前需调用此函数。

TouchRect(long left, long top, long right, long bottom, long sleft, long stop, long sright, long sbottom, long count, long* result)——前面四个参数是要判定的目标矩形坐标,后面是整个画面的坐标,count应在1-(目标矩形面积/整个画面面积*捕捉到的画面矩形面积)之间。Count越大抗干扰能力越强。result为结果,0是触摸到,否则为一非0值。

DrawImage(unsigned long hDC, long left, long top, long right, long bottom)——绘制捕捉到的画面。
hDC:要绘制的目标DC句柄。
left-bottom:目标矩形坐标。

GetLocation(long* x, long* y, long type)——获得移动物体坐标。目前还未完善,仅供测试。
x, y:返回移动物体坐标。
type:扫描模式。

AlphaDrawImage(hDC, left, top, right, bottom, alpha)——将当前捕捉到的画面半透明绘制到窗口中。
前面参数同DrawImage函数
alpha:0完全透明,255完全不透明

SaveImage((char*)str)——保存当前捕捉到的图像
str:文件的全路径,如:“C:\\Test.bmp”

备注:
共享版引擎的速度没有加以限制,最高可以达到30FPS
如需要无叠加字幕的商用授权版请联系:deeplymove@tom.com or deeplymove@sohu.com

修改纪录:
2005-6-12 初稿
2005-6-15 加入Sensitiveness,AlphaDrawImage,SaveImage说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐