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

想請教一個有關影像處裡的問題

尚未結案
marlborok
一般會員


發表:2
回覆:1
積分:0
註冊:2005-01-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-19 05:49:22 IP:203.204.xxx.xxx 未訂閱
這學期專題做"足球機器人之影像處理" 其動作大致上是:由ccd擷取影像-->傳回電腦-->對擷取到的影像做處理-->再傳回電腦作判斷下策略-->傳給機器人執行動作. 而我的工作就是前三項"由ccd擷取影像-->傳回電腦-->對擷取到的影像做處理" 但現在用c builder做到了擷取影像並且做到了存成".bmp"檔. 可是對影像處理一點頭緒也沒有! 想請問各位前輩,假如我擷取到的畫面是足球場地和場地上的一顆球,足球是黃色的,足球場地為綠色底及白色邊線. 要怎麼樣才能做到說,按滑鼠左鍵點球,而螢幕上會處理成只有留下球(黃色),而其他場地上的顏色都會變成黑色,並顯示球的座標? 謝謝!!! 專題啊.....讓我過吧!!! 發表人 - taishyang 於 2005/01/19 09:26:57
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-19 09:36:03 IP:210.68.xxx.xxx 未訂閱
您好:
引言: 可是對影像處理一點頭緒也沒有! 想請問各位前輩,假如我擷取到的畫面是足球場地和場地上的一顆球,足球是黃色的,足球場地為綠色底及白色邊線. 要怎麼樣才能做到說,按滑鼠左鍵點球,而螢幕上會處理成只有留下球(黃色),而其他場地上的顏色都會變成黑色,並顯示球的座標?
影像處理問題版上已有相當多的討論,可以搜尋到你要的資訊 您的問題直覺上可利用HSI, HSV...等轉換色彩座標的方式將黃色部份取出 且減少光線影響的程度,再利用Connect Component的方式獲得物件的座標 其中的關鍵字都能從版上獲得參考資料與程式碼 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-19 19:25:34 IP:61.222.xxx.xxx 未訂閱
您好 請參考下列程式碼  
 
int pr, pg, pb;    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   TColor color = Image1->Picture->Bitmap->Canvas->Pixels[X][Y];
   int r, g, b;
   r = GetRValue(color);
   g = GetGValue(color);
   b = GetBValue(color);
   AnsiString msg;
   msg.printf("(%d, %d, %d)", r,g, b);
   Label1->Caption = msg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{  TColor color = Image1->Picture->Bitmap->Canvas->Pixels[X][Y];
   pr = GetRValue(color);
   pg = GetGValue(color);
   pb = GetBValue(color);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int range = 20; //自行修改範圍 修正到您要的
  Byte * ptr;      Image1->Picture->Bitmap->PixelFormat = pf24bit;
  for (int row=0; rowPicture->Height; row  )
     { int index=0;
       ptr = (Byte*)Image1->Picture->Bitmap->ScanLine[row];
       for (int col=0; colPicture->Width; col  )
          { if ( abs(ptr[index  ]-pb)> range ||
                 abs(ptr[index 1]-pg)> range ||
                 abs(ptr[index 2]-pr)> range    )
              { ptr[index]   = 0;
                ptr[index 1] = 0;
                ptr[index 2] = 0;
              }
            index  = 3;
          }
     }    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Load1Click(TObject *Sender)
{
  if ( OpenDialog1->Execute() )
    {
       Image1->Picture->LoadFromFile(OpenDialog1->FileName);
       Graphics::TBitmap *pBitmap = new Graphics::TBitmap();           pBitmap->Width  = Image1->Picture->Width;
       pBitmap->Height = Image1->Picture->Height;
       pBitmap->Canvas->Draw(0,0,Image1->Picture->Graphic);
       
       Image1->Picture->Assign(pBitmap);
    }
}
//---------------------------------------------------------------------------
發表人 - 1666362 於 2005/01/19 19:28:26
marlborok
一般會員


發表:2
回覆:1
積分:0
註冊:2005-01-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-20 01:16:40 IP:203.204.xxx.xxx 未訂閱
謝謝taishyang&1666362兩位大大的教導!!! 馬上去試看看!!! 專題會不會過就看這次了!!!
系統時間:2024-05-10 6:38:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!