運用攝像頭采集標準圖像_第1頁
運用攝像頭采集標準圖像_第2頁
運用攝像頭采集標準圖像_第3頁
運用攝像頭采集標準圖像_第4頁
運用攝像頭采集標準圖像_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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,用來調節(jié)保存圖像的壓縮比例。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;/拷貝指定區(qū)域的信息到指定位置Finally

11、Image1.Canvas.DrawFocusRect(Bakrec;BitMap.Free;end;end;image1.Visible:=false;end;2.5保存截取好的圖像首先創(chuàng)建一個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 /一直監(jiān)視保護的進程begin/查找保護的進程的窗體句柄FindWnd:=FindWindow(nil,防止進程被強制結束'/如果沒有查找到,說明被保護的進程被關閉重新啟動計算機if FindWnd=0thenResetComput;/重新啟動計算機自定義過程end;end;initialization/創(chuàng)建守護線程hThreadHandle:=CreateThread(nil,0,Thre

14、adProc,nil,0,dwThreadID;finalizationif hThreadHandle <>0thenTerminateThread(hThreadHandle,0;本文實例的守護線程一直監(jiān)視被保護的進程,如果被保護的進程關閉則重新啟動計算機。當然處理的方法有很多,讀者可以自行考慮。4結語例程不具有雙向守護的功能,讀者可自行修改完善。利用遠程線程插入技術創(chuàng)建進程的守護線程的方法,對于編寫遠程控制類的程序具有重要的參考價值。程序在Windows XP+Delphi 6.0下測試通過。參考文獻1飛思科技編著.Delphi 下深入Windows 核心編程.電子工業(yè)出版社

15、.2求實科技編著.Delphi 7程序設計與開發(fā)技術大全.人民郵電出版社.(收稿日期: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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論