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

利用MIL作影像平均如何加快速度

答題得分者是:friendlly
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-18 17:38:18 IP:140.126.xxx.xxx 未訂閱
其實不完全使用mil
而僅有截圖時使用
照規格來看手邊使用的CCD相機應該有每秒29張(640*480下)得能力
但我如果連續擷取30張圖後作平均竟然需要5秒的時間
想請問各位前輩這正常嗎
還是說程式寫錯了
[code cpp]
MbufClear(MilImage1 , 0L);

LARGE_INTEGER start, end, Hz;
QueryPerformanceFrequency(&Hz);//取得CPU頻率

QueryPerformanceCounter(&start);//開始
if(abs(StrToInt(Edit1->Text))<=1)
{
Application->MessageBox("FPS(張數)要2才能作影像平均", "警告", MB_OK
MB_ICONSTOP MB_TOPMOST);
CheckBox2->Checked = false;
return;
}
unsigned long int SavImageSize = IMAGE_WIDTH*IMAGE_HEIGHT, *MilImage3;
unsigned char *MilImage2;
MilImage2 = new unsigned char[SavImageSize];
MilImage3 = new unsigned long int[SavImageSize];

for(int k=0;k<(StrToInt(Edit1->Text));k )
{
MbufClear(MilImage , 0L);
MdigHalt(MilDigitizer);
MbufGet(MilImage, MilImage2);
MdigGrabContinuous(MilDigitizer, MilImage);
for(long int i=0;i {
Application->ProcessMessages();
MilImage3[i] =MilImage2[i];
}
}
for(long int i=0;i {
Application->ProcessMessages();
MilImage2[i]=(MilImage3[i]/StrToInt(Edit1->Text));
}
MdigHalt(MilDigitizer);
MbufPut(MilImage, MilImage2);
MbufCopy(MilImage, MilImage1);
MdigGrabContinuous(MilDigitizer, MilImage);
delete []MilImage2;
delete []MilImage3;
QueryPerformanceCounter(&end);//結束

[/code]
謝謝
friendlly
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-18 18:00:06 IP:61.64.xxx.xxx 訂閱
CCD 硬體規格每秒30張  不代表  你連續抓30 張= 1秒
你的程式執行也要時間
依你說的 30張要5秒 , 也就是你約 166 msec 才抓一張
這樣了吧....你的程式寫法 影響時間
friendlly
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-18 18:06:22 IP:61.64.xxx.xxx 訂閱
補充一下  影像卡本身 有些有支援 Buffer
我使用的Euresys 系列的卡最大可以設定到3個buffer
但是這也只是說 當我去複製影像資料時的那個時間點的影像比較即時
跟你要的1秒取30張 是不一樣的

你的問題
建議可以程式一開始時開30個buffer
然後在callback 裡面 連續 copy 30張 到buffer 後再去處理你要的動作
當然這樣只是加快取像 需要多久 ,要測試才知道
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-24 11:32:36 IP:140.126.xxx.xxx 未訂閱
誠如前輩所提
這裡算是我表達錯誤了
我後來發現MIL可以利用HOOK的方式掃記憶體中圖片是否完整
因而達成存取同步的效果
===================引 用 friendlly 文 章===================
CCD 硬體規格每秒30張 不代表 你連續抓30 張= 1秒
你的程式執行也要時間
依你說的 30張要5秒 , 也就是你約 166 msec 才抓一張
這樣了吧....你的程式寫法 影響時間
系統時間:2024-05-06 1:19:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!