請問如何對USB視訊畫面做處理?? |
尚未結案
|
flydragon198
一般會員 發表:2 回覆:1 積分:0 註冊:2006-08-10 發送簡訊給我 |
我是剛學Delphi一個月的新手@@自己看書學的,對於記憶體和stream的觀念幾乎等於零=.=,看了很多文章,還在學習中。
把整個影音多媒體程式設計討論區都找遍了,可是我沒找到如何對視訊擷取下來的畫面做處理(使用Object pascal),有找到C 語法的,可是我們需要使用Object pascal,而我又不懂如何C 轉成pascal,所以只好麻煩各位前輩了。 我的問題是:如何對USB webcam擷取的畫面做處理?(我是使用VFW) 使用CCD或CMOS應該沒有差異吧?? 我是正在學習 多媒體程式設計-使用Delphi 這本書,在第十章10-4預覽回呼函式中,我想對lpvhdr裡面的資料作處理,lpvhdr應該是儲存擷取到的影像資料。例如要做二值化,因此要能夠取得每一點的像素值(pixel),RGB的值,但是我不知道該如何下手,我有想到兩個方法。 1.宣告一個TBitmap,把lpvhdr從記憶體中取出,放入Tbitmap中處理,修改完後再放回記憶體。 2.宣告一個陣列來存lpvhdr,修改完後再存回lpvhdr。 只是我看到的範例都是C ,幾乎沒有使用object pascal,不知道該怎麼處理,該使用哪些函式,所以麻煩各位大大不吝指教,謝謝。 [code] procedure TForm1.capFrameCallBack(sender:TObject;lpVhdr:PVIDEOHDR); var DC: HDC; BitmapInfo: PBitmapInfo; BitsMem,DataBuf:Pointer; BMHandle:HBITMAP; B:TBitmap; begin if FModifiedFrame then exit; FModifiedFrame:=TRUE; if lpVhdr^.lpData = nil then begin FModifiedFrame:=FALSE; exit; end; VideoViewForm.GetVideoFormat; BitmapInfo:= VideoViewForm.VideoFormat; DataBuf:=lpVhdr^.lpData; DC := GetDC(0); try BMHandle := CreateDIBSection(DC, BitmapInfo^, DIB_RGB_COLORS, BitsMem, 0, 0); if BMHandle <> 0 then begin try Move(DataBuf^,BitsMem^,lpVhdr^.dwBytesUsed); except DeleteObject(BMHandle); BMHandle:=0; end; end; finally ReleaseDC(0, DC); end; if BMHandle=0 then begin FModifiedFrame:=FALSE; exit; end; b:=TBitmap.Create; b.Handle:= BMHandle; SetBkMode(b.Canvas.Handle,TRANSPARENT ); b.Canvas.Font.Size:=16; b.Canvas.Font.Color:=0; b.Canvas.TextOut(2,2,'現場 LIVE'); b.Canvas.Font.Color:=clYELLOW; b.Canvas.TextOut(0,0,'現場 LIVE'); try Move(BitsMem^,DataBuf^,lpVhdr^.dwBytesUsed); except end; b.Free; FModifiedFrame:=FALSE; end; [/code] 這是我第一次問問題,以上程式碼是摘錄自書中範例程式,如果有不妥的地方,請告訴我,我馬上改進,謝謝。 翻了很多本delphi的書,都沒有對指標和記憶體做很詳細的說明,只有教^變數名,@變數名,變數名^,所以希望各位前輩能指導。感恩。 |
flydragon198
一般會員 發表:2 回覆:1 積分:0 註冊:2006-08-10 發送簡訊給我 |
我已經找到我要的答案了,在上面那個範例裡,b:=TBitmap.Create;前面加上那段程式碼,就可以在預覽回呼函式裡面對每一個像素作處理,因為格式是RGB,所以每次inc(lpvhdr.lpdata)就會取下一個點的值,上面那個程式是簡單的轉成黑白影像,之後可以得到每一點的值,我就能夠對影像作處理了,因為我是初學者,所以問了很蠢的問題,佔用大家的資源,真是抱歉。 ----------取之於人者太多,還之於人者太少---------- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |