花了一百块钱买的USB摄像头除了跟几个朋友聊视频外,平时就一直处于闲置状态。一日我突发奇想:能不能用它来做个视频监视报警系统,经过本人一段时间的研究发现还真是可以,只要使用C++ Builder6就很容易实现这个功能,而且效果还是不错的,现在就把自己的心得和大家分享一下!我们的推荐文章 一、创建窗体 创建窗体Form1,将它调整到适当大小,在上面放上Panel1、Label1、StatusBar1、ScrollBar1、GroupBox1、Memo1、Button1、Button2和Timer1控件,将Button1的caption属性改为“启动摄像头”,Button2的Caption属性改为“开始监控”,Label1的Caption改为“灵敏度”,修改Timer1的Enabled为false,Interval为500,修改ScrollBar1的Min为100,Max为1000。 二、增加头文件 打开头文件:Unit1.h,为它增加两个头文件: #include "jpeg.hpp" #include "vfw.h" 修改private段如下: private: // User declarations CAPDRIVERCAPS gCapDrvCaps; int sizef,sizetemp,jd; int __fastcall getfiles(); void __fastcall scanpic(); 三、添加函数 打开Unit1.cpp文件,添加两个函数: void __fastcall TForm1::scanpic() { Graphics::TBitmap *Bitmap=new Graphics::TBitmap; TJPEGImage *jmp= new TJPEGImag e; Bitmap->Width=Form1->Panel1->Width; Bitmap->Height=Form1->Panel1->Height; Bitmap->PixelFormat=pf32bit; ::BitBlt(Bitmap->Canvas->Handle,Form1->Panel1->Left,Form1->Panel1->Top,Form1->Panel1->Width,Form1->Panel1->Height, Form1->Canvas->Handle,0,0,SRCCOPY); // Bitmap->SaveToFile("tu.bmp"); jmp->Assign(Bitmap); jmp->Compress(); jmp->SaveToFile("temp.jpg"); delete jmp; delete Bitmap; } //----------------- int __fastcall TForm1::getfiles() { HANDLE HMyFile=::CreateFile("aa.jpg",GENERIC_READ,0,0,OPEN_EXIS TING,FILE_ATTRIBUTE_NORMAL,0); double sized=(double)::GetFileSize((void *)HMyFile,NULL); CloseHandle(HMyFile); return sized; } 四、为按钮添加代码 双击Button1按钮,为它添加OnClick事件代码如下: HWND capWin = capCreateCapture Window ((LPSTR) "Video Windows",WS_CHILD | WS_VISIBLE,Panel1->Left,Panel1->Top,Panel1->Width,Panel 1->Height,(HWND) Handle,1); if(capDriverConnect(capWin,0)) { capDriverGetCaps(capWin,&gCapDrvCaps,sizeof(CAPDRIVERCAPS)); if(gCapDrvCaps.fCaptureInitialized) { capPreviewRate(capWin,66); capPreview(capWin,TRUE); } else { StatusBar1->SimpleText="摄像头初始化失败!"; } } else { StatusBar1->SimpleText="摄像头连接不成功!"; } 双击Button2为它添加OnClick事件代码如下: jd=ScrollBar1->Position; scanpic(); sizef=getfiles(); Timer1->Enabled=true; 双击ScrollBar1为它添加OnChange事件如下: jd=ScrollBar1->Position; 双击Timer1为它添加OnTimer事件如下: scanpic(); sizetemp=getfiles(); if(abs(sizetemp-sizef)>jd) { AnsiString fp; DateTimeToString(fp,"yyyy'年'mm'月'dd'日'mm'分'ss'秒'",Now()); Memo1->Lines->Add("有人偷苹果!"+fp+IntToStr(sizetemp));//产生报警日志 sndPlaySound("xx.wav",SND_ASYNC);//播放警报声 } 五、设置报警声 在程序目录下面放上你喜欢听到的报警声音,并将声音文件命名为xx.wav,运行程序,点击“启动摄像头”将摄像头对准桌面上的苹果,当画面基本稳定时再按“开始监控”。tW.WinGWIT.CoM这时你偷偷地把手伸过去抓苹果,是不是报警了?同样你还可以将摄像头对准你房间的门,防止你在聚精会神地玩电脑时,有人突然窜到你的背后吓唬你,在使用过程中还可以任意调整监视系统的灵敏度。 |