我想控制每一秒擷取4張畫面... |
尚未結案
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: 1.控制CCD每一秒擷取4張畫面...且 Timer1->Interval:=1000/4 ; void __fastcall TForm1::Timer1Timer(TObject *Sender) { capGrabFrameNoStop(vcHWND); } 2.每一張都要放在記憶體中作處理... 請問要做什麼處理1. 這樣的寫法是寫死的...不知要如何才能在程式執行時能直接選擇要的張數...本站是有一個delphi的範例...但是我看不懂... 2.離散小波轉換...就是將記憶體中每一點做一些加加減減... |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
//StartCapture................................ TCAPTUREPARMS CapParms;
capCaptureGetSetup(fhCapWnd, &CapParms, sizeof(TCAPTUREPARMS));
capFileSetCaptureFile(fhCapWnd,fCapVideoFileName); CapParms.dwRequestMicroSecPerFrame = fmicrosecpframe;
CapParms.fLimitEnabled = BOOL(FCapTimeLimit);
CapParms.wTimeLimit = fCapTimeLimit;
CapParms.fCaptureAudio = fCapAudio;
CapParms.fMCIControl = FALSE;
CapParms.fYield = TRUE;
CapParms.vKeyAbort = VK_ESCAPE;
CapParms.fAbortLeftMouse = FALSE;
CapParms.fAbortRightMouse = FALSE; if (CapParms.fLimitEnabled) // Calculate Indexsize
{
CapParms.dwIndexSize= frameRate*FCapTimeLimit; // For Video Frames
}
else
{
If (CapParms.dwIndexSize = 0) // Default Value
{
CapParms.DwIndexSize = 100000 // Value bigger then default for larger Videos
}
else
{
CapParms.dwIndexSize = findexSize; // IndexSize by user
};
}; if (CapParms.dwIndexSize < 1800 ) CapParms.dwIndexSize= 1800; // Limit Control
If (CapParms.dwIndexSize > 324000 ) CapParms.dwIndexSize= 324000; capCaptureSetSetup(fhCapWnd, &CapParms, sizeof(TCAPTUREPARMS));
if (CapToFile )
result= capCaptureSequence(fhCapWnd)
else
result= capCaptureSequenceNoFile(fhCapWnd); //...........................................
//StopCapture;
CapCaptureStop(fhcapwnd); 發表人 - cmf 於 2003/02/18 17:03:03 發表人 - cmf 於 2003/02/18 17:13:43
------
︿︿ |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
string fCapVideoFileName;
fCapVideoFileName="c:\c.avi";
capFileSetCaptureFile(fhCapWnd,(long)fCapVideoFileName.c_str()); CapParms.dwRequestMicroSecPerFrame = 這裡是設定張數
//dwRequestMicroSecPerFrame
//Requested frame rate, in microseconds. The default value is 66667,
//which corresponds to 15 frames per second. 發表人 - cmf 於 2003/02/18 20:15:11
------
︿︿ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: string fCapVideoFileName; fCapVideoFileName="c:\c.avi"; capFileSetCaptureFile(fhCapWnd,(long)fCapVideoFileName.c_str()); 發表人 - cmf 於 2003/02/18 20:15:11CapParms.dwRequestMicroSecPerFrame = 這裡是設定張數 //dwRequestMicroSecPerFrame //Requested frame rate, in microseconds. The default value is 66667, //which corresponds to 15 frames per second. 你這些字的意思是66667 等於每秒擷取15張嗎??.. 那每秒擷取四張就是 (66667/15)*4 嗎? |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: string fCapVideoFileName; fCapVideoFileName="c:\c.avi"; capFileSetCaptureFile(fhCapWnd,(long)fCapVideoFileName.c_str()); 發表人 - cmf 於 2003/02/18 20:15:11我如果只要設定擷取張數..以下是不是不用寫? CapParms.fLimitEnabled = BOOL(FCapTimeLimit); CapParms.wTimeLimit = fCapTimeLimit; CapParms.fCaptureAudio = fCapAudio; CapParms.fMCIControl = FALSE; CapParms.fYield = TRUE; CapParms.vKeyAbort = VK_ESCAPE; CapParms.fAbortLeftMouse = FALSE; CapParms.fAbortRightMouse = FALSE; |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
CapParms.dwRequestMicroSecPerFrame = 這裡是設定張數
//dwRequestMicroSecPerFrame
//Requested frame rate, in microseconds. The default value is 66667,
//which corresponds to 15 frames per second. 你這些字的意思是66667 等於每秒擷取15張嗎??..
那每秒擷取四張就是 (66667/15)*4 嗎?
1 秒 = 1000000 microseconds
66667= 1000000 microseconds/15 張
所以
CapParms.dwRequestMicroSecPerFrame =1000000 microseconds/4 張
發表人 - cmf 於 2003/02/19 09:52:11
------
︿︿ |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
我如果只要設定擷取張數..以下是不是不用寫?
CapParms.fLimitEnabled = BOOL(FCapTimeLimit);
CapParms.wTimeLimit = fCapTimeLimit;
CapParms.fCaptureAudio = fCapAudio;
CapParms.fMCIControl = FALSE;
CapParms.fYield = TRUE;
CapParms.vKeyAbort = VK_ESCAPE;
CapParms.fAbortLeftMouse = FALSE;
CapParms.fAbortRightMouse = FALSE;
如果不設定 則就是原來的設定值 但你還是要了解阿 CapParms.fLimitEnabled = 是否 使用 時間極限
CapParms.wTimeLimit = 設定 時間長度
CapParms.fCaptureAudio = 是否 捕捉聲音
CapParms.fMCIControl = FALSE; //是否使用 mci Control
CapParms.fYield = TRUE; //The default value is FALSE
CapParms.vKeyAbort = VK_ESCAPE; // 按 esc key 結束
CapParms.fAbortLeftMouse = FALSE; //是否 按 滑鼠 左鍵 結束
CapParms.fAbortRightMouse = FALSE; //是否 按 滑鼠 右鍵 結束
------
︿︿ |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: 可是我設定1000000/1(每秒一張) 和1000000/30(每秒30張) 所抓出來的avi 檔..撥放起來都依樣順呢? 你可以是是看 在 1 秒中 錄30個不同場景 看是否一樣If (CapParms.dwIndexSize = 0) // Default Value { CapParms.DwIndexSize = 100000 // 這個100000是怎麼決定的呀? } else { CapParms.dwIndexSize = findexSize; // }; }; if (CapParms.dwIndexSize < 1800 ) CapParms.dwIndexSize= 1800; // 以下這三行不是很懂.....Limit Control If (CapParms.dwIndexSize > 324000 ) CapParms.dwIndexSize= 324000; |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
//dwIndexSize
//Maximum number of index entries in an AVI file. Values range from 1800 to 324,000.
//If set to 0, a default value of 34,952 (32K frames plus a proportional number of audio
// buffers) is used.
//Each video frame or buffer of waveform-audio data uses one index entry. The value of
//this entry establishes a limit for the number of frames or audio buffers that can be
//captured. else
{
//如果是零的話 default value of 34,952 (32K frames plus a proportional number of audio
// buffers) is used.
If (CapParms.dwIndexSize = 0)
{
CapParms.DwIndexSize = 100000; // Value bigger then default for larger Videos
}
else
{
CapParms.dwIndexSize = findexSize; // IndexSize by user
};
};
//dwIndexSize 有效範圍 1800 至 324000
if (CapParms.dwIndexSize < 1800 ) CapParms.dwIndexSize= 1800; // Limit Control
If (CapParms.dwIndexSize > 324000 ) CapParms.dwIndexSize= 324000; capCaptureSetSetup(fhCapWnd, &CapParms, sizeof(CAPTUREPARMS)); if (CapToFile )
result= capCaptureSequence(fhCapWnd) // 存到 檔案
else
result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案
------
︿︿ |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: if (CapToFile ) result= capCaptureSequence(fhCapWnd) // 存到 檔案 else result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案謝謝你詳細的解說..我終於把這篇搞懂了...但是還有二個問題... 1.result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案...那他會放在記憶體什麼地方? 如何叫用??? 2.我擷取30張和1張所錄的檔案大小幾乎一樣... 不是應該差30倍嗎? |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
1.result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案...那他會放在記憶體什麼地方? 如何叫用???
SendMessage(fhcapwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0,(long)&VideoStreamCallbackProc);
2.我擷取30張和1張所錄的檔案大小幾乎一樣...
不是應該差30倍嗎?
俺不知 你的參數設定 及 執行的程序
所以無法知到為什麼會這樣
------
︿︿ |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: 2.我擷取30張和1張所錄的檔案大小幾乎一樣... 不是應該差30倍嗎? 俺不知 你的參數設定 及 執行的程序 所以無法知到為什麼會這樣我的程式如下..先開啟ccd... hCapWnd=capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE ,0, 0, 320, 240,Panel1->Handle, 0); capDriverConnect (hCapWnd,0) ; capOverlay(hCapWnd, true); capPreviewRate(hCapWnd,25); capPreview(hCapWnd,TRUE); 存檔............ CAPTUREPARMS CapParms; capCaptureGetSetup(hCapWnd, &CapParms, sizeof(CAPTUREPARMS)); CapParms.dwRequestMicroSecPerFrame = 1000000/1;//每秒一畫面 capCaptureSetSetup(hCapWnd, &CapParms, sizeof(CAPTUREPARMS)); capFileSetCaptureFile(hCapWnd,"c:\\test.avi"); capCaptureSequence(hCapWnd); 我只有這樣寫... 不知道有什麼地方要改呢? |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: 1.result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案...那他會放在記憶體什麼地方? 如何叫用??? SendMessage(fhcapwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0,(long)&VideoStreamCallbackProc);1.result= capCaptureSequenceNoFile(fhCapWnd); 我是不是要設一個變數 ..ex. int result; 2.顯示VideoStreamCallbackProc 沒有定義..... |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
void __fastcall TForm1::InitCaptureWindows()
{
hCapWnd=capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE ,0, 0, 320, 240,Panel1->Handle, 0); capDriverConnect (hCapWnd,0) ; capOverlay(hCapWnd, true);
capPreviewRate(hCapWnd,25);
capPreview(hCapWnd,TRUE);
} //
void __fastcall TForm1::StartButtonClick(TObject *Sender)
{
CAPTUREPARMS CapParms;
capCaptureGetSetup(hCapWnd, &CapParms, sizeof(CAPTUREPARMS)); CapParms.dwRequestMicroSecPerFrame = 1000000/1;//每秒一畫面
CapParms.fLimitEnabled = FALSE;
CapParms.fCaptureAudio = FALSE;
CapParms.fMCIControl = FALSE;
CapParms.fYield = TRUE;
CapParms.vKeyAbort = VK_ESCAPE;
CapParms.fAbortLeftMouse = FALSE;
CapParms.fAbortRightMouse = FALSE; if (CapParms.dwIndexSize < 1800 ) CapParms.dwIndexSize= 1800; // Limit Control
If (CapParms.dwIndexSize > 324000 ) CapParms.dwIndexSize= 324000; capCaptureSetSetup(hCapWnd, &CapParms, sizeof(CAPTUREPARMS)); capFileSetCaptureFile(hCapWnd,"c:\\test.avi");
capCaptureSequence(hCapWnd); } void __fastcall TForm1::StopButtonClick(TObject *Sender)
{ CAPSTATUS driverstatus;
capGetStatus(hCapWnd,&driverstatus, sizeof(CAPSTATUS)) ; if (fpDriverStatus.fCapturingNow )
{
CapCaptureStop(hCapWnd);
} }
------
︿︿ |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: if (CapParms.dwIndexSize < 1800 ) CapParms.dwIndexSize= 1800; // Limit Control If (CapParms.dwIndexSize > 324000 ) CapParms.dwIndexSize= 324000; capCaptureSetSetup(hCapWnd, &CapParms, sizeof(CAPTUREPARMS)); capFileSetCaptureFile(hCapWnd,"c:\\test.avi"); capCaptureSequence(hCapWnd); }問題出在我少了這些這定..對嗎? |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: 1.result= capCaptureSequenceNoFile(fhCapWnd); // 不存到 檔案...那他會放在記憶體什麼地方? 如何叫用??? SendMessage(fhcapwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0,(long)&VideoStreamCallbackProc);1.result= capCaptureSequenceNoFile(fhCapWnd); 我是不是要設一個變數 ..ex. int result; 2.顯示VideoStreamCallbackProc 沒有定義.....是不是要設定.. xxxx VideoStreamCallbackProc;取得位址 那xxxx 是什麼呢? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |