線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7944
推到 Plurk!
推到 Facebook!

請問如何使用DSpack擷取Webcam的畫面

尚未結案
ccsyaran
一般會員


發表:2
回覆:2
積分:0
註冊:2005-09-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-15 13:02:35 IP:140.118.xxx.xxx 未訂閱
請問是否有人成功擷取webcam畫面到image裡 我用SampleGrabber成功擷取mpeg的圖像 但是webcam的不行 請問有人使用DSpack的SampleGrabber成功的嗎 能否指點一下,感激不盡
roller
一般會員


發表:9
回覆:20
積分:5
註冊:2004-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-01 06:45:44 IP:220.141.xxx.xxx 訂閱
剛把DSPack裝完, 附的Example也可以正確執行,
不過網路上逛了好久卻找不到詳細的Webcam擷取範例
這邊的討論好像也不多

是否有人可以分享一下從視訊抓取一張圖的方法呢?
或是提供一下相關BCB使用DSPack的Website呢?

謝謝
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-01 15:02:37 IP:59.112.xxx.xxx 訂閱
先確認你的webcam有支援 directX .
安裝完裡面有範例你去看看囉....
{DSPACK}\\demo\\
===================引 用 文 章===================
請問是否有人成功擷取webcam畫面到image裡 我用SampleGrabber成功擷取mpeg的圖像 但是webcam的不行 請問有人使用DSpack的SampleGrabber成功的嗎 能否指點一下,感激不盡
roller
一般會員


發表:9
回覆:20
積分:5
註冊:2004-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-01 16:41:21 IP:220.141.xxx.xxx 訂閱
那請問一下, 我可以跑playcap並正確顯示出視訊, 
是不是代表支援部份沒問題?

那是否可以提供一下抓取視訊單張圖下來的範例嗎?
謝謝
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-02 00:21:53 IP:59.112.xxx.xxx 訂閱
裡面範例也有
用一個Image
SampleGrabber(Image->Picture->Bitmap);
Image->Save......
===================引 用 文 章===================
那請問一下, 我可以跑playcap並正確顯示出視訊,?
是不是代表支援部份沒問題?

那是否可以提供一下抓取視訊單張圖下來的範例嗎?
謝謝
roller
一般會員


發表:9
回覆:20
積分:5
註冊:2004-11-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-02 04:45:06 IP:220.141.xxx.xxx 訂閱
謝謝...
其實我本來就是用這個方法, 只是抓出來的圖都是empty
後來找到需先加入以下兩行 ...

CheckDSError(SampleGrabber1->QueryInterface(IID_IBaseFilter, &CaptureFilter));
Graph->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, SourceFilter, NULL, CaptureFilter);

這樣才會有動作...

不過我又有三個問題了...
1. 我該如何設定視訊影像的解析度呢?

2. 又該如何設定每秒鐘的影像張數?

3. 以及SampleGrabber1Buffer()是不是在每個frame進來時都會被觸發一次?
而若我要對視訊影像做處理的話, 直接寫在該事件內就可以了是嗎?
那我設定每秒30張frame, 是不是代表我在SampleGrabber1Buffer()就可以
每秒鐘就得到30張圖?
不知道這觀念對不對...


DSPack的資料好像不多, 網路上找的也多半是Delphi範例, 不是很懂Delphi所以
有點吃力, 請大家多幫忙嘍!先謝謝friendly

friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-02 09:29:54 IP:61.64.xxx.xxx 訂閱
1 ,2 的問題我也一直在測試站上發表過的文章你找找看..有成功在發一下
3.每秒30frame實際上可能只有27~28左右..在Interlace架構下你只要確定每次更新圖片的動作完成
你就可以判斷了.
========非交錯===========引 用 文 章===================
謝謝...
其實我本來就是用這個方法, 只是抓出來的圖都是empty
後來找到需先加入以下兩行 ...

CheckDSError(SampleGrabber1->QueryInterface(IID_IBaseFilter, &CaptureFilter));
Graph->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, SourceFilter, NULL, CaptureFilter);

這樣才會有動作...

不過我又有三個問題了...
1. 我該如何設定視訊影像的解析度呢?

2. 又該如何設定每秒鐘的影像張數?

3. 以及SampleGrabber1Buffer()是不是在每個frame進來時都會被觸發一次?
??? 而若我要對視訊影像做處理的話, 直接寫在該事件內就可以了是嗎?
??? 那我設定每秒30張frame, 是不是代表我在SampleGrabber1Buffer()就可以
??? 每秒鐘就得到30張圖?
??? 不知道這觀念對不對...


DSPack的資料好像不多, 網路上找的也多半是Delphi範例, 不是很懂Delphi所以
有點吃力, 請大家多幫忙嘍!先謝謝friendly

roller
一般會員


發表:9
回覆:20
積分:5
註冊:2004-11-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-02 23:02:23 IP:220.141.xxx.xxx 訂閱
我在progdigy.com網站看到一兩篇討論
http://www.progdigy.com/modules.php?name=Forums&file=viewtopic&t=1012&highlight=setvideoparams
http://www.progdigy.com/modules.php?name=Forums&file=viewtopic&p=10203&highlight=

但都是Delphi的範例, 不太懂得如何改寫成BCB
更無法確定此方法是否可以正確使用...

不知道是否有人可以試著改看看呢?

謝謝!
roller
一般會員


發表:9
回覆:20
積分:5
註冊:2004-11-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-05 03:37:20 IP:220.141.xxx.xxx 訂閱
對了 ... 想請問一下friendly
你是安裝DirectX 9 SDK 還是 DirectX SDK
因為我在progdigy看到一些討論都是講DirectX SDK
我不知道兩者是否有何差異, 可以的話順便跟我說一下你下載DirectX(9) SDK 的版本及網址

謝謝

by the way ... 現在已經有點想放棄使用DSPack
BCB能參考的資料實在好少 ...
或者就是我太嫩了 ...
不知道是否還有什麼library可以選擇
我只知道vfw.h及DSPack ..
要是DSPack真的搞不定的話, 就該換換看了 ...
charlietian
一般會員


發表:1
回覆:6
積分:1
註冊:2008-04-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-06-30 10:30:21 IP:119.127.xxx.xxx 訂閱

===================引 用 ccsyaran 文 章===================
請問是否有人成功擷取webcam畫面到image裡

我用SampleGrabber成功擷取mpeg的圖像

但是webcam的不行

請問有人使用DSpack的SampleGrabber成功的嗎

能否指點一下,感激不盡
========================================================
用SampleGrabber是可以的,请参考下面的代码,只要设置都正确应该就可以;




[code cpp]
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
SysDev = new TSysDevEnum(CLSID_VideoInputDeviceCategory);

if (SysDev->CountFilters > 0)
{
int i;
for(i = 0; i < SysDev->CountFilters; i )
{
// Memo1->Lines->Add(SysDev->Filters[i].CLSID );
Memo1->Lines->Add(SysDev->Filters[i].FriendlyName);
}
}
FilterGraph->ClearGraph();
FilterGraph->Active = false;
Filter->BaseFilter->Moniker = SysDev->GetMoniker(((TMenuItem *)Sender)->Tag);
FilterGraph->Active = true;
ICaptureGraphBuilder2 *Graph = NULL;
IBaseFilter *SourceFilter = NULL;
IBaseFilter *VideoFilter = NULL;
IBaseFilter *SampleFilter = NULL;




CheckDSError(FilterGraph->QueryInterface(IID_ICaptureGraphBuilder2, &Graph));
CheckDSError(VideoWindow->QueryInterface(IID_IBaseFilter, &VideoFilter));
CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter));
CheckDSError(SampleGrabber1->QueryInterface(IID_IBaseFilter, &SampleFilter));

Graph->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, SourceFilter, NULL, VideoFilter);
Graph->RenderStream(&PIN_CATEGORY_CAPTURE, NULL, SourceFilter, NULL, SampleFilter);


FilterGraph->Play();
Graph->Release();
VideoFilter->Release();
SourceFilter->Release();


}
//---------------------------------------------------------------------------

void __fastcall TMainForm::Button2Click(TObject *Sender)
{
// bmp->Width=640;
// bmp->Height=480;

SampleGrabber1->GetBitmap(bmp);

Image1->Picture->Bitmap->Assign(bmp);
}

[/code]
liangng
一般會員


發表:1
回覆:3
積分:0
註冊:2011-12-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2013-08-11 02:41:11 IP:118.232.xxx.xxx 訂閱
我使用delphi,改了一下,是可以成功,真是受用了,感恩
系統時間:2024-03-29 16:47:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!