200元为学校组建电子照片采集系统
《中国电脑教育报》雷前君
现在很多学校都建立了电子档案,在建立电子档案的过程中,最难的信息采集就是照片。尽管可通过扫描仪用普通照片进行扫描,但是操作复杂,而且速度很慢。用数码摄像机或数码照相机组建的电子照片采集系统尽管速度快,操作简便,效果好,但是投资较大。
笔者经过探索,花了不到200元自己动手建立了我校的电子照相系统,在我校的教育管理中发挥了重要作用(如打印准考证、学生证、出入证、住宿证、考场座位图等),而且操作简便,照片质量也不错。现将经验介绍给大家分享。
硬件准备
1. 能够运行Windows 98或更高版本的计算机。
2. USB接口摄像头一只(一般的电脑市场都有,约200元)。
将USB摄像头接入电脑,安装好驱动程序和应用软件,打开应用软件,在Video Format设置中将其Image Size(图像尺寸)设为CIF(352×288)。
软件准备
1. Visual Foxpro(6.0以上版本,以下简称VFP)。
2. AvCap.ocx控件
AvCap(
AVCapture.zip)是一个基于DirectShow过滤器的音/视频捕捉和预览的ActiveX控件。在应用程序或页面中放一个AvCap,只需很少的代码就可让您的软件支持音/视频捕捉了。
3. PicClp32.ocx控件(类名PictureClip)。
本控件位于Windows的System或System32文件夹内,在安装VFP时被自动安装。
由于使用AvCap控件所捕捉的图像尺寸与实际应用时的图像尺寸不太一致,因此需用PictureClip控件将其剪裁为指定尺寸。用它的Picture属性将源位图加载到控件中,再用ClipX和ClipY属性指定剪裁区域的左上角。用 ClipHeight和ClipWidth属性指定剪裁区域的范围。然后利用VFP的SavePicture函数将其写入到指定的位图文件中。
编程
1( 准备工作
(1)为便于管理,在某驱动器(如D盘)的根目录下建一子目录Photo,将下载的AcCap.ocx控件拷入该目录,用“画笔”程序画一图像,高×宽=288×216(如图1),命名为Default.bmp,将其保存入Photo目录。在本目录下再建一子目录Bmp,用于存放拍照的照片。
(2)建一数据库表Student.dbf,将其存入Photo目录,表结构如图2。
在图2所示表中,索引类型设为“候选索引”的目的是保证学生在数据库表中的惟一性。在电子照相时,以学号作为该学生的照片文件名,可避免重复。xh(学号)字段的8位可按如下格式输入,如20040001,其中前四位代表入学年级,后四位代表学生序列,学号范围从20040001至20049999。
(3)注册控件:可在命令行方式下注册两个控件,如:regsvr32 AvCap.ocx、regsvr32 PicClp32.ocx,也可在VFP环境中,通过菜单“工具?选项?控件?ActiveX控件”方式来注册。
2( 制作表单
(1)运行VFP,建立如图3所示的表单集Formset1,添加两个表单Form1和Form2。设置Form1的Caption属性为预览窗口,在其内添加AvCap控件,控件的Name属性设为OleAvCap;设置Form2的Caption属性为照相窗口,在其内添加如图3所示的6个控件(图像剪裁控件PictureClip、图像控件Image、列表框控件List、命令按钮控件CommandButton三个),控件的Name属性分别设为OlePicClip 、Image1、List1、CmdPhoto、CmdNext、CmdQuit。
(2)将数据库表Student.dbf添加到该表单集的数据环境中去,将CurSor1的Order属性设为xh。
(3)编写程序代码:
在Formset1的Init Event(即Formset1.Init)中添加以下代码:
IF thisformset.form1.oleAvCap.CurVcd=0
thisformset.form1.oleAvCap.PlayState
=1
ELSE
=Messagebox("视频设备连接不上~ "+chr(13)+"请检查电源线或数据线~", 0+16,"错误信息~")
RETU .F.
ENDIF
thisformset.form2.CmdPhoto.setfocus
在Form1的Init Event(即Form1.Init)中添加以下代码:
this.Left=3
this.Top=1
this.Width=216 &&&&&&与下面要拍照的照片宽度一致
this.Height=312
this.MaxButton=.F.
this.MinButton=.F.
this.ControlBox=.F.
this.BorderStyle=1
this.Caption="预览窗口"
*****以下设置AvCap控件的大小及位置
this.OleAvCap.Top=12
this.OleAvCap.Width=352
this.OleAvCap.Height=288
this.OleAvCap.Left=-(352-216)/2
&&&&&&将本控件居中,保证视频流中人像居中
在Form2的Init Event(即Form2.Init)中添加以下代码:
this.Left=228
this.Top=1
this.Width=394
this.Height=394
this.MaxButton=.F.
this.MinButton=.F.
this.ControlBox=.F.
this.BorderStyle=1
this.Caption="照相窗口"
*****以下设置image控件的大小、位置等属性
this.image1.Left=10
this.image1.Top=12
this.image1.Width=216
this.image1.Height=288
this.image1.BorderStyle=1
IF file('bmp\'+xh+'.bmp')
this.image1.picture='bmp\'+xh+'.bmp'
ELSE
this.image1.picture='default.bmp'
ENDIF
*****以下设置List控件的大小、位置等属性
this.List1.ColumnCount=2
this.List1.Left=236
this.List1.Top=12
this.List1.Width=148
this.List1.Height=288
this.List1.FontSize=12
this.List1.RowSourceType=0
this.List1.RowSource="student.xh,xm"
this.List1.RowSourceType=6
this.List1.ListItemId=1
在List1的InteractiveChange Event中添加以下代码:
*****以下代码保证记录变动后,学生照片跟着刷新
IF file('bmp\'+xh+'.bmp')
thisform.image1.picture='bmp\'+xh+'.bmp'
ELSE
thisform.image1.picture='default.bmp'
ENDIF
thisform.CmdPhoto.setfocus
在CmdPhoto的Click Event(CmdPhoto.Click)中添加以下代码:
IF file('bmp\'+xh+'.bmp')
?chr(7)
nChoice=Messagebox("照片已存在~"+chr(13)+chr(13)+"替换吗,", 4+32+256,"提示信息~")
IF nChoice=6 &&&&&&&&&&&&&&&&&&选择YES
****以下代码先抓取当前视频流中的一幅图像将其保存为大照片 ****
thisformset.form1.OleAvCap.TakePictureToFile('bmp\'+xh+'.bmp')
****以下代码通过PicClip32.ocx控件将大照片剪裁为小照片*******
thisform.OlePicClip.picture=loadpicture('bmp\'+xh+'.bmp')
thisform.OlePicClip.clipx=(352-216)/2+1
thisform.OlePicClip.clipy=0
thisform.OlePicClip.clipheight=288
thisform.OlePicClip.clipwidth=216
SavePicture(thisform.OlePicClip.clip,'bmp\'+xh+'.bmp')
ENDIF
ELSE
thisformset.form1.OleAvCap.TakePictureToFile('bmp\'+xh+'.bmp')
thisform.OlePicClip.picture=loadpicture('bmp\'+xh+'.bmp')
thisform.OlePicClip.clipx=(352-216)/2+1
thisform.OlePicClip.clipy=0
thisform.OlePicClip.clipheight=288
thisform.OlePicClip.clipwidth=216
SavePicture(thisform.OlePicClip.clip,'bmp\'+xh+'.bmp')
ENDIF
thisform.List1.InteractiveChange &&&&刷新照片
this.parent.CmdNext.setfocus &&&&与CmdNext按钮转换焦点实现轻松拍照
在CmdNext的Click Event(CmdNext.Click)中添加以下代码:
thisform.List1.ListItemId=thisform.List1.ListItemId+1
thisform.List1.InteractiveChange &&&&刷新照片
this.parent.CmdPhoto.setfocus &&&&与Cmdphoto按钮转换焦点实现轻松拍照
在CmdQuit的Click Event(CmdQuit.
Click)中添加以下代码:
thisformset.release
至此,程序编写完毕,按按钮运行程序就可进行电子照相了。照相过程非常方便,只需按回车键或空格键就可轻松采集照片。要保证照片质量,USB摄像头最好固定,并且保证光线明亮、均匀、自然、柔和。
图1 默认图片
图2 数据表
本文档为【200元为学校组建电子照片采集系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。