全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1193
推到 Plurk!
推到 Facebook!

錄影時不能做判斷,請大家救救我吧

尚未結案
angelfelix
一般會員


發表:1
回覆:0
積分:0
註冊:2005-07-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-27 10:19:24 IP:203.64.xxx.xxx 未訂閱
請大家救救我吧!我寫了一個多執行緒的程式,用來判斷影像是否有移動,只要移動就會錄影 不動就停止錄影,但是一但錄影的時候,就不能動作,不能比較圖片,請大家救救我吧    //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "Unit1.h" #include "vfw.h" #include "jpeg.hpp" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HWND hCapWnd; BITMAPINFO bmi; CAPTUREPARMS CaptureParms; int width,height,ss,mm,hh,dd; bool flag; double compare; static double basic; static int cout; TMyThread *MyThread,*MyThread1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { width=320; height=240; hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, width, height,Form1->Panel1->Handle, 0 ); bool a = false; for( int i = 0; i < 10; i ) { a = capDriverConnect( hCapWnd, i ); if( a ) break; } if( !a ) { ShowMessage("攝影機連接失敗.."); } capOverlay(hCapWnd, true); capPreview(hCapWnd,true); capPreviewScale(hCapWnd,true); capPreviewRate(hCapWnd, 1000/30); capGetVideoFormat(hCapWnd, &bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biWidth=width; bmi.bmiHeader.biHeight=height; SetWindowPos(hCapWnd, 0, 0, 0, bmi.bmiHeader.biWidth,bmi.bmiHeader.biHeight,0); Form1->Panel1->ClientHeight=bmi.bmiHeader.biHeight; Form1->Panel1->ClientWidth=bmi.bmiHeader.biWidth; basic=0; compare=0; flag=false; } //--------------------------------------------------------------------------- _fastcall TMyThread::TMyThread(void):TThread(true) { Resume(); } void __fastcall TMyThread::Execute()//執行緒 function { } void __fastcall TMyThread::wwb3() { Synchronize(wwb); } void __fastcall TMyThread::wwb2() { Synchronize(wwb1); } void __fastcall TMyThread::wwb1() { capGrabFrameNoStop(hCapWnd); capEditCopy(hCapWnd); if(Clipboard()->HasFormat(CF_BITMAP)) { Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr1; int r,g,b; int gray; int i,j; int threshold; threshold=125; Form1->img1->Picture->Bitmap->Assign(Clipboard()); Bmp->Assign(Form1->img1->Picture->Bitmap); for(j=0;jHeight;j ) { ptr1 = (Byte *)Bmp->ScanLine[j]; for(i=0;iWidth;i ) { b=ptr1[i*3]; g=ptr1[i*3 1]; r=ptr1[i*3 2]; gray=0.299*r 0.587*g 0.114*b; if(gray>threshold) gray=255; else gray=0; compare=compare gray; } } } } void __fastcall TMyThread::wwb() { if (basic==0) basic=compare; if ((abs(compare-basic)>=200000) && (flag==false)) {//Form1->Btn1->Click(); basic=compare; compare=0; flag=true; Form1->Memo1->Lines->Add("開始錄影"); } else if ((abs(compare-basic)<=200000) && (flag==true)) {if(cout==5) { //Form1->Btn1->Click(); Form1->Memo1->Lines->Add("停止"); basic=compare; compare=0; flag=false; cout=0; } else { cout=cout 1; basic=compare; compare=0; } } else {basic=compare; compare=0; cout=0; Form1->Memo1->Lines->Add("繼續");} } void __fastcall TForm1::Btn2Click(TObject *Sender) { capDriverDisconnect(hCapWnd); } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn1Click(TObject *Sender) { if(Btn1->Caption=="啟動錄影") { SaveDialog1->InitialDir=ExtractFilePath(Application->ExeName); SaveDialog1->FileName=Now().FormatString("yyyymmmmddhhnnss"); capCaptureGetSetup(hCapWnd,&CaptureParms,sizeof(CAPTUREPARMS)); CaptureParms.fYield = true; CaptureParms.vKeyAbort = VK_F1; CaptureParms.fAbortLeftMouse = false; CaptureParms.fAbortRightMouse = false; CaptureParms.dwIndexSize = 324000; capCaptureSetSetup(hCapWnd,&CaptureParms,sizeof(CAPTUREPARMS)); capFileSetCaptureFile(hCapWnd,(SaveDialog1->FileName ".avi").c_str()); capCaptureSequence(hCapWnd); Btn1->Caption="停止錄影"; } else { capCaptureStop(hCapWnd); Btn1->Caption="啟動錄影"; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { if(Btn1->Caption=="啟動錄影") { Form1->Caption="攝影機--現在時間: " Time(); ss=0;dd=0;mm=0;hh=0; } if(Btn1->Caption=="停止錄影") { if(ss==60) { ss=0; mm ; } if(mm==60) { mm=0; hh ; } if(hh==24) { hh=0; dd ; } Form1->Caption="攝影機--錄影中: " IntToStr(dd) " 天" IntToStr(hh) " 時" IntToStr(mm) " 分" IntToStr(ss) " 秒"; ss ; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { MyThread=new TMyThread(); MyThread->Priority = tpNormal; MyThread->FreeOnTerminate=true; MyThread1=new TMyThread(); MyThread1->Priority = tpHighest; MyThread1->FreeOnTerminate=true; MyThread1->wwb2(); MyThread->wwb3(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { MyThread->Terminate(); MyThread1->Terminate(); } //---------------------------------------------------------------------------
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-27 10:42:07 IP:210.68.xxx.xxx 未訂閱
您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 > 關於您的問題請參考下面連結 >
szhc
一般會員


發表:4
回覆:10
積分:2
註冊:2005-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-28 13:59:22 IP:218.18.xxx.xxx 未訂閱
angelfelix : b=ptr1[i*3]; g=ptr1[i*3 1]; r=ptr1[i*3 2]; gray=0.299*r 0.587*g 0.114*b; if(gray>threshold) gray=255; else gray=0; compare=compare gray; 這段中的“ gray=0.299*r 0.587*g 0.114*b;”表示什麼意思? 那幾個小數有什麼作用?
系統時間:2024-05-12 22:53:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!