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

求得圖形中心點後算圖的大小不行的問題

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


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-07-03 22:37:11 IP:122.120.xxx.xxx 訂閱
  這個程由image1 輸入一圖片 -->由二值化--->計算圖形中心點--->計算圖形大小(不行) 因為我準備拮取圖片中的圖形....程式碼如下    請資深板友指點
Byte *ptr,*ptr1;//用來指像素行的指標
int r,g,b;//rgb三原色
int gray;//用來存灰階化後的值
int x_center,y_center,count=0;
unsigned int x_total,y_total;
int r_length;
TPoint x[2000];
TPoint P1[1];
TPoint P2[1];
Graphics::TBitmap *Bmps = new Graphics::TBitmap(); //定義一個圖象句柄//
Graphics::TBitmap *Bmp1 = new Graphics::TBitmap(); //定義一個new TBitmap
Bmps->Assign(Form1->Image1->Picture->Bitmap); // 將Image1 的Bitmap轉存到TBitmap Bmp
for(int d = 0; d < Bmps->Height; d )
{
ptr = (Byte *) Bmps->ScanLine[d]; //該行像素位址給ptr
for(int c = 0; c < Bmps->Width; c )
{
b=ptr[c*3]; //該點第一個位子是藍色
g=ptr[c*3 1]; //該點第二個位子是綠色
r=ptr[c*3 2]; //該點第三個位子是紅色
gray=(0.299*r 0.587*g 0.114*b);
if(gray>128) //如果是白色維持原來若不是變成黑色
gray=255; //0:代表black 255:代表白
else
gray=0;
ptr[c*3]=(Byte)gray; //存回bgr值,產生二值化影像
ptr[c*3 1]=(Byte)gray;
ptr[c*3 2]=(Byte)gray;
}
}
Form1->Image2->Picture->Bitmap=Bmps;

Bmp1->Assign( Form1->Image2->Picture->Bitmap); // 將Image2 的Bitmap轉存到TBitmap Bmp
for(int j = 0; j < Bmp1->Height; j )
{
ptr1 = (Byte *) Bmp1->ScanLine[j]; //該行像素位址給ptr
for(int i = 0; i < Bmp1->Width; i )
{
if((Byte)ptr1[i*3]==0) //為何ptr[i*3]一定要這樣才可以找到圓心 ,但似乎誤差很明顯
{
x_total=x_total i; //物體中心=(所有紅點X座標 / 所有紅點數, 所有紅點 Y 座標 / 所有紅點數)
y_total=y_total j;
x[count].x=i; //找到圖形中最後一點座標
x[count].y=j;
count=count 1;
}
}
}
P1[1].x=x[0].x; //找到圖形中第一點座標
P1[1].y=x[0].y;
P2[1].x=x[count].x; //找到圖形中最後一點座標
P2[1].y=x[count].y;
x_center=(int)(x_total/count); //算出物體中心座標
y_center=(int)(y_total/count);
r_length=sqrt(((x_center-P1[1].x)*(x_center-P1[1].x)) ((y_center-P1[1].y)*(y_center-P1[1].y)));
Image2->Canvas->Pen->Color=clRed; // red color line
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);//顯示物體中心座標
Label4->Caption="顯示點數:" IntToStr(count);
Label3->Caption="捉到第一點座標:" IntToStr(x[0].x) "," IntToStr(x[0].y);
Label5->Caption="捉到最後一點座標:" IntToStr(x[count].x) "," IntToStr(x[count].y);
delete Bmp1;
delete Bmps;
圖片

附加檔案:4e107e97d437b_p1.JPG
編輯記錄
eulor2000 重新編輯於 2011-07-04 08:11:06, 註解 無‧
diablo09105
一般會員


發表:25
回覆:45
積分:24
註冊:2011-05-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-07-04 20:06:43 IP:118.167.xxx.xxx 訂閱
現在是說要截取圖片???
還是中心點有問題???

我被搞亂了... = =
但中心點你有取平均值
我看了一下沒有錯才對呀...
------
燒毛崴
系統時間:2017-10-23 10:29:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!