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

請問求物體中心誤差

答題得分者是:senso
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-15 23:05:08 IP:218.175.xxx.xxx 訂閱



_fastcall TForm1::Button3Click(TObject *Sender)
{
Byte *ptr;//用來指像素行的指標
int x_center,y_center,count;
int x_total,y_total;

Graphics::TBitmap *Bmp1 = new Graphics::TBitmap(); //定義一個new TBitmap

Bmp1->Assign(Form1->Image2->Picture->Bitmap); // 將Image2 的Bitmap轉存到TBitmap Bmp

for(int j = 0; j < Bmp1->Height; j )
{
ptr = (Byte *) Bmp1->ScanLine[j]; //該行像素位址給ptr
for(int i = 0; i < Bmp1->Width; i )
{
if((Byte)ptr[i*3]==0) //為何ptr[i*3]一定要這樣才可以找到圓心 ,但似乎誤差很明顯
{
x_total=x_total i; //物體中心=(所有紅點X座標 / 所有紅點數, 所有紅點 Y 座標 / 所有紅點數)
y_total=y_total j;
count=count 1;
}
}
}
x_center=x_total/count; //算出物體中心座標
y_center=y_total/count;
Image2->Canvas->Pen->Color=clRed;
Image2->Canvas->Pen->Width=2;
Image2->Canvas->MoveTo(x_center,y_center-50);
Image2->Canvas->LineTo(x_center,y_center 50);
Image2->Canvas->MoveTo(x_center-50,y_center);
Image2->Canvas->LineTo(x_center 50,y_center);
Label2->Caption=IntToStr(x_center) "," IntToStr(y_center);

}
編輯記錄
eulor2000 重新編輯於 2009-10-15 23:06:29, 註解 無‧
eulor2000 重新編輯於 2009-10-15 23:14:57, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-19 11:01:20 IP:61.219.xxx.xxx 訂閱
請設初值
[code cpp]
int x_center=0,y_center=0,count=0;
int x_total=0,y_total=0;

[/code]

if((Byte)ptr[i*3]==0) //為何ptr[i*3]
因為你的圖可能是24bit所以是3Byte,可以設中斷點看一下
[code cpp]
Bmp1->Assign(Form1->Image2->Picture->Bitmap);
Bmp1->PixelFormat; //Bmp1->PixelFormat=pf24bit //6=pf24bit
[/code]
eulor2000
一般會員


發表:51
回覆:34
積分:17
註冊:2008-11-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-19 21:16:04 IP:218.175.xxx.xxx 訂閱
感謝senso 板有熱心指導.... 問題解決了
系統時間:2024-04-27 8:37:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!