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

要如何加快影像,達到即時的效果

答題得分者是:n890377
forgetguitar
一般會員


發表:1
回覆:1
積分:0
註冊:2006-12-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-16 00:01:58 IP:220.129.xxx.xxx 訂閱
各位大大您好,不好意思,我是新手,有個影像延遲的問題想問一下,
我使用double buffer的方法,將影像(320X240灰階)擷取到buffer1的矩陣中,再針對每個pixel作不同的處理,
之後用buffer2取像後,再將buffer2與buffer1中的資料做矩陣相減的動作,
用循環的方式希望能達到real-time的灰階處理,
不過似乎在做矩陣相減的動作時,讓影像出現延遲的現象,(因為每取像一次,就會跑320X240次迴圈)
請問各位大大,有加快矩陣相減,或是直接用buffer2減去buffer1的方法嗎??
謝謝^^
n890377
一般會員


發表:17
回覆:16
積分:21
註冊:2006-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-18 11:47:52 IP:163.22.xxx.xxx 未訂閱
 
以下程式碼你參考看看:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();
Graphics::TBitmap *Bmp2 = new Graphics::TBitmap();
Byte *ptr1;
Byte *ptr2;
int b1,g1,r1,b2,g2,r2;
int gray1,gray2,gray3;
Bmp1->Assign(Image1->Picture->Bitmap);
Bmp2->Assign(Image2->Picture->Bitmap);

for(int i=0;iHeight;i )
{
ptr1=(Byte *)Bmp1->ScanLine[i];
ptr2=(Byte *)Bmp2->ScanLine[i];
for(int j=0;jWidth;j )
{
b1=ptr1[j*3];
g1=ptr1[j*3 1];
r1=ptr1[j*3 2];
gray1=0.299*r1 0.587*g1 0.114*b1;//得到Image1的灰度值
b2=ptr2[j*3];
g2=ptr2[j*3 1];
r2=ptr2[j*3 2];
gray2=0.299*r2 0.587*g2 0.114*b2;//得到Image2的灰度值
gray3=abs(gray1-gray2); //灰度值相減
//===回代===
// ptr2[j*3] =(Byte)gray3;
// ptr2[j*3 1]=(Byte)gray3;
// ptr2[j*3 2]=(Byte)gray3;
//==========
if(gray3>20)
{
ptr2[j*3 2]=ptr1[j*3 2];
ptr2[j*3 1]=ptr1[j*3 1];
ptr2[j*3]=ptr1[j*3];
}
else
{
ptr2[j*3] = 255;
ptr2[j*3 1]= 255;
ptr2[j*3 2]= 255;
}
}
}
Image3->Picture->Assign(Bmp2);
}
------
.
forgetguitar
一般會員


發表:1
回覆:1
積分:0
註冊:2006-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-18 22:00:09 IP:220.129.xxx.xxx 訂閱
謝謝大大的指導,我己成功改善程式的延遲問題了,
感恩^^
系統時間:2024-04-20 10:39:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!