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

由Web Camera 取得圖檔在二值化應用

 
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-21 17:09:38 IP:211.20.xxx.xxx 未訂閱
大家好,在網站上看了前輩的Web Camera 影像取得與二值化程式 因為我在學校專題有需要這兩種結合的功能, 第一次寫BCB ^^"""" 希望大家給點指教 我知道程式應該可以更順的運作,但是我剛剛進入BCB與delphi 不知道該怎麼改指令速度上會更快,大家一起研究看看 檔案內附原始檔 juneo 2004/07/21 分享比獲得更快樂
附加檔案:53553_DEMO4.rar
willis
一般會員


發表:9
回覆:11
積分:4
註冊:2002-09-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-28 22:53:25 IP:220.130.xxx.xxx 未訂閱
你的方式是將取到影像存成檔案後再重新讀進來,這是利用TMemoryStream 功能,加上CALLBACK FUNTION 功能,這樣就不會因TIME的問題造成DELEY,不知如何上傳執行檔,只能上傳圖檔,如果需要再MAIL給我吧,先貼上SOURCE CODE。    #include  #pragma hdrstop #include "Unit1.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMainForm *MainForm; HWND GetCapWnd; LRESULT CALLBACK GetVideo( HWND hwnd, Longint lpvideo ); //--------------------------------------------------------------------------- LRESULT CALLBACK GetVideo( HWND hwnd, Longint lpvideo ) { LPVIDEOHDR VideoStr; static BITMAPINFO Bitmap_Info; static BITMAPINFOHEADER Bitmap_Info_Head; static BITMAPFILEHEADER Bitmap_File_Head; CAPSTATUS status; int BIHsize, byte,gray; int r,g,b; int threshold; Byte *ptr,*ptr1; TMemoryStream *stream = new TMemoryStream; Graphics::TBitmap *Bmp = new Graphics::TBitmap(); VideoStr=LPVIDEOHDR(lpvideo); capGetStatus( GetCapWnd, &status, sizeof(status) ) ; BIHsize=capGetVideoFormatSize( GetCapWnd ); capGetVideoFormat( GetCapWnd, &Bitmap_Info_Head, BIHsize); Bitmap_Info.bmiHeader=Bitmap_Info_Head; stream->Size=sizeof(Bitmap_File_Head) sizeof(Bitmap_Info_Head) Bitmap_Info_Head.biSizeImage; Bitmap_File_Head.bfType=0x4D42; Bitmap_File_Head.bfSize=stream->Size; Bitmap_File_Head.bfOffBits=sizeof(Bitmap_File_Head) sizeof(Bitmap_Info_Head); stream->Position=0; stream->WriteBuffer( &Bitmap_File_Head, sizeof(Bitmap_File_Head) ); stream->WriteBuffer( &Bitmap_Info, sizeof(Bitmap_Info) ); (void*)ptr=stream->Memory; ptr =ptr Bitmap_File_Head.bfOffBits; Move( VideoStr->lpData, ptr, Bitmap_Info_Head.biSizeImage); stream->Position=0; //歸0 threshold=MainForm->ScrollBar1->Position; MainForm->Edit1->Text=MainForm->ScrollBar1->Position; Bmp->LoadFromStream(stream) ; for(int j=0;jHeight;j ) { ptr1 = (Byte *)Bmp->ScanLine[j]; for(int 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; ptr1[i*3]=(Byte)gray; ptr1[i*3 1]=(Byte)gray; ptr1[i*3 2]=(Byte)gray; } } //二值化結束 MainForm->Image1->Picture->Bitmap=Bmp; delete stream ; return(0); } //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMainForm::Edit1Change(TObject *Sender) { Edit1->Text=ScrollBar1->Position; } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormShow(TObject *Sender) { GetCapWnd = capCreateCaptureWindow ( "",WS_CHILD | WS_VISIBLE ,0,0,Panel1->Width,Panel1->Height,Panel1->Handle, 0); bool ccd_ready = false; ccd_ready=capDriverConnect(GetCapWnd,0); if( !ccd_ready ) { ShowMessage("攝影機連接失敗.."); return; } capPreviewRate(GetCapWnd,100); capPreview(GetCapWnd,true); capSetCallbackOnFrame (GetCapWnd, &GetVideo); }
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-29 11:33:18 IP:211.75.xxx.xxx 未訂閱
可以將檔案寄給我研究看看嗎 我有發郵件給你了^^ 我的郵件juneo921@yahoo.com.tw 分享比獲得更快樂--Juneo
系統時間:2024-05-13 10:21:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!