运用摄像头采集标准图像_第1页
运用摄像头采集标准图像_第2页
运用摄像头采集标准图像_第3页
运用摄像头采集标准图像_第4页
运用摄像头采集标准图像_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 很多领域在处理某些重要事情时都要留下办理人的个人图像,以便事后查询,利用摄像头快速、方便地采集个人图像方式被广范运用在很多领域。利用数码像机采集个人图像后期处理成本过高,而通过摄像头和程序对采集到图像进行一次完整处理在几秒钟内就可以完成。1概述首先调用avicap32.dll组件对摄像头进行AVI电影和视频的截取。利用Delphi中Canvas对象对截取图形进行处理,Delphi 的绘图功能非常强大,而它的绘图功能大部分都集成在Canvas 对象中,它封装了Delphi中的所有绘图函数,同时还封装了Windows图形设备接口GDI,Canvas对象调用复杂的Windows API才能完成的功

2、能,文中正是利用Canvas对象的绘图函数对采集到的图像进行二次处理。调用avicap32.dll组件增加对视频源和视频格式的控制。2设计(1利用avicap32组件提供的函数,显示出视频图像。(2通过avicap32组件提供的函数截取出相应图像,保存起来。(3移动鼠标通过Canvas对象截取图像相应部位。(4调整压缩率大小,控制图像文件压缩比例。主要控件说明:2个Panel控件,一个用来显示视频,另一个用来显示截取图像(2个Image控件放在此控件上;2个Image控件,一个用来显示截取的整幅图像,另一个用来显示鼠标截取图像;1个TrackBar,用来调节保存图像的压缩比例。2.1显示视频p

3、rocedure TForm1.FormCreate(Sender:TObject;beginhWndC:=capCreateCaptureWindowA('教师资格照片采集', WS_CHILD or WS_VISIBLE,Panel1.Left+5,Panel1.Top+ 5,640,480,Form1.Handle,0;/显示的视频在Panel1控件上,并调整好视频大小和位置if hWndC<>0then SendMessage(hWndC,WM_CAP_SET_CALLBACK_VIDEOSTREAM,0,0; SendMessage(hWndC,WM_CA

4、P_SET_CALLBACK_ERROR, 0,0;SendMessage(hWndC,WM_CAP_SET_CALLBACK_STATUSA,0,0; SendMessage(hWndC,WM_CAP_DRIVER_CONNECT,0,0; SendMessage(hWndC,WM_CAP_SET_SCALE,1,0; SendMessage(hWndC,WM_CAP_SET_PREVIEWRATE,66, 0;SendMessage(hWndC,WM_CAP_SET_OVERLAY,1,0; SendMessage(hWndC,WM_CAP_SET_PREVIEW,1,0; end;2.2

5、截取整幅图像截取整幅图像保存成一个BMP文件,并通过Image控件显示出来:procedure TForm1.Button1Click(Sender:TObject;varbakrec:TRect;beginif hWndC<>0thenbeginif pregrab thenbeginSendMessage(hWndc,WM_CAP_SET_PREVIEWRATE,30,0;SendMessage(hWndc,WM_CAP_SET_PREVIEW, WPARAM(true,0;pregrab:=false;endelsebeginsendmessage(hWndc,WM_CAP_

6、GRAB_FRAME,0,0;pregrab:=true;end;end;Panel2.Visible:=true;panel1.Visible:=false;运用摄像头采集标准图像摘要:通过摄像头调用avicap32组件截取图像,充分应用Delphi中Canvas对象对图像处理。关键词:Delphi;avicap32组件;Canvas对象;图像采集周亮 (下转第77页image1.Visible:=true;image2.Visible:=false;GetDir(0,fldname;if hWndC <>0then beginSendMessage (hWndC,WM_CAP_

7、SAVEDIB,0,longint (pchar (fldname+'1.bmp'/将截取的图像保存成一个BMP 文件image1.Picture.LoadFromFile(fldname+'1.bmp'/并通过image1调用该BMP 文件end;2.3移动鼠标截取图像在每次移动鼠标并按下左键时都重新调用一次截取的整幅图像,是因为在这幅图像上每按下一次左键就会在这幅图像上画一个矩形框,但并不能保证每一次选中的图像就是想要的理想图像。此就是每按下一次鼠标左键时就要重新调用一次的原因,这方法虽然些有复杂,但很实用,效果很好。procedure TForm1.Ima

8、ge1MouseDown (Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer;beginimage1.Picture.LoadFromFile(fldname+'1.bmp'c.Left:=x;c.Top:=y;c.Right:=292+x;c.Bottom:=400+y;/确定位图大小,此取值为一个标准2寸图片大小,你可以根/据你需要来确定矩形框大小Image1.Canvas.Pen.Color:=clred;Image1.Canvas.DrawFocusRect(c;/在图像上画一个292*40

9、0的矩形框Image1.Refresh;end;2.4截取标准图像将从Image1中截取标准图像通过剪贴板存入Image2中。procedure TForm1.Button4Click(Sender:TObject;varBitMap:TBitMap;bakrec:TRect;beginClipBoard.Assign(Image1.Picture;/将Image1中图形存入剪贴板中image2.Visible:=true;Bakrec.Left:=0;bakrec.Top:=0;bakrec.Right:=292;Bakrec.Bottom:=400;image2.Height:=400;i

10、mage2.Width:=292;image2.Left:=(image1.Width-image2.Widthdiv 2;image2.Top:=(image1.Height-image2.Heightdiv 2;if ClipBoard.HasFormat(CF_BitMapthen /剪贴板的内/容可以通过查询HasFormat 获得其格式位图beginBitMap:=TBitMap.Create;TryBitMap.Assign(Clipboard;Image2.Canvas.BrushCopy (bakrec,BitMap,C,ClRed;/拷贝指定区域的信息到指定位置Finally

11、Image1.Canvas.DrawFocusRect(Bakrec;BitMap.Free;end;end;image1.Visible:=false;end;2.5保存截取好的图像首先创建一个TJPEGImage 类,通过Assign 方法将Image2载入的图像复制到本例中,然后通过读取TrackBar 值来确定压缩率大小,再进行二次转换,当然压缩率越大效果越好,但也不能太大。procedure TForm1.Button5Click(Sender:TObject;varMyJPEG:TJPEGImage;beginif SavePictureDialog1.execute then b

12、eginMyJPEG:=TJPEGImage.Create;MyJPEG.Assign(Image2.Picture.Graphic;MyJPEG.CompressionQuality:=tb.Position;/压缩率大小MyJPEG.Compress;if copy(SavePictureDialog1.filename,length (SavePictureDialog1.filename-3,4='.jpg'thenbeginMyJPEG.SaveToFile(SavePictureDialog1.filename;end else beginMyJPEG.SaveTo

13、File (SavePictureDialog1.filename +'.jpg'end; /守护线程procedure ThreadProc;beginwhile true do /一直监视保护的进程begin/查找保护的进程的窗体句柄FindWnd:=FindWindow(nil,防止进程被强制结束'/如果没有查找到,说明被保护的进程被关闭重新启动计算机if FindWnd=0thenResetComput;/重新启动计算机自定义过程end;end;initialization/创建守护线程hThreadHandle:=CreateThread(nil,0,Thre

14、adProc,nil,0,dwThreadID;finalizationif hThreadHandle <>0thenTerminateThread(hThreadHandle,0;本文实例的守护线程一直监视被保护的进程,如果被保护的进程关闭则重新启动计算机。当然处理的方法有很多,读者可以自行考虑。4结语例程不具有双向守护的功能,读者可自行修改完善。利用远程线程插入技术创建进程的守护线程的方法,对于编写远程控制类的程序具有重要的参考价值。程序在Windows XP+Delphi 6.0下测试通过。参考文献1飞思科技编著.Delphi 下深入Windows 核心编程.电子工业出版社

15、.2求实科技编著.Delphi 7程序设计与开发技术大全.人民邮电出版社.(收稿日期:2009-9-12End If Loop Next i '关闭文件Close #1rdback.Close dbback.Close End Sub4结语采用VC+6.0、Word2003、Access2003,实现了将数据库内容生成Word 文档,并将修改后的Word 文档内容写回数据库。生成Word 文档时,以字段内容写入文本框为例,也可以将数据库内容读入Word 表格等其他形式,通过读取表格等对象内容更新数据库,实现方法相似。(收稿日期:2009-10-15MyJPEG.Free;end;if

16、hWndc=0then hWndC:=capCreateCaptureWindowA('教师资格照片采集',WS_CHILD or WS_VISIBLE,Panel1.Left,panel1.Top,panel1.Width,panel1.Height,Panel1.Handle,0;if hWndc<>0thensendMessage (hWndc,WM_CAP_DRIVER_CONNECT,0,0;SendMessage (hWndc,WM_CAP_SET_PREVIEWRATE,30,0;SendMessage(hWndc,WM_CAP_SET_PREVIEW,WPARAM(tru

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论