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

關於辨識顏色的問題

尚未結案
visuala
一般會員


發表:33
回覆:39
積分:14
註冊:2003-04-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-12 21:30:55 IP:218.170.xxx.xxx 未訂閱
各位大大 不好意思 我想請問一下.. 圖片中本來有黃,藍,紅,綠四個區域... <<原圖>> 另一張圖片則是加入了一個粉紅色的圓圈 <<外來物進來>> 最後我要用CCD來拍攝, 但是我想我先用數位像機拍攝幾張圖做辨識的測試 我要做到的目標是 1.把拍攝照片的原圖確定出四種顏色的範圍 2.然後手指戴一個粉紅色的圓圈進入原圖,進入後的圖就是像加了粉紅色的圈圈 3.因為之前已經訂出了原圖的四種顏色所在範圍,便可以馬上找出粉紅色現在的位置 4.判定出粉紅色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件 這個我想用拿來做小遊戲的驅動機制 我現在的問題是因為數位像機拍攝出來的圖片RGB誤差艇大的,不知道我該用什麼方法修正 如果不用RGB當判定依據的話 又該如何在一開始確定出四種顏色的範圍呢 麻煩各位大大跟我指點一下 謝謝~ 發表人 - visuala 於 2003/11/12 21:44:30
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-12 21:41:31 IP:140.135.xxx.xxx 未訂閱
visuala您好: 是否方便上傳實際情況的圖片呢?    順心
visuala
一般會員


發表:33
回覆:39
積分:14
註冊:2003-04-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-12 22:00:29 IP:218.170.xxx.xxx 未訂閱
引言: visuala您好: 是否方便上傳實際情況的圖片呢? 順心 < face="Verdana, Arial, Helvetica"> 不好意思 我現在手邊剛好沒有像機和實際照片 我再補傳..><... 那就理論來說的話..該從何下手呢..可以用濾波來解決嗎? 發表人 - visuala 於 2003/11/12 22:02:08
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-12 22:10:26 IP:140.135.xxx.xxx 未訂閱
visuala您好:
引言: 3.因為之前已經訂出了原圖的四種顏色所在範圍,便可以馬上找出粉紅色現在的位置 4.判定出粉紅色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件
何不直接找出粉紅色的位置呢? 為了抵抗光線的影響,大部分都是轉到HSV,HSI,或者是YCrCb這些把亮度獨立出 來的色彩模型 順心
visuala
一般會員


發表:33
回覆:39
積分:14
註冊:2003-04-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-15 18:02:24 IP:218.170.xxx.xxx 未訂閱
我要驅動的事件何不直接找出粉紅色的位置呢? 為了抵抗光線的影響,大部分都是轉到HSV,HSI,或者是YCrCb這些把亮度獨立出 來的色彩模型    順心 ------------------------------------------------------- 不好意思 我傳兩張實際用像機拍出來的圖...麻煩幫我看看 <<原圖>> < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=12699675&CC=284025"> <<加入手指的圖>> PS:1.顏色我是任舉來測試的 所以如果要改可以再換 2.我是想用邊邊的黑點來幫助邊界判定 不要可以刪除 //-----------我的目標是---------// 1.把拍攝照片的<<原圖>>確定出四種顏色的區域範圍(座標) 2.然後手指戴一個黃色的圓圈進入<<原圖>>,進入後的圖就是像加了黃色的圈圈--<<加入手指的圖>> 3.因為之前已經訂出了<<原圖>>的四種顏色所在範圍,便可以馬上找出黃色現在的位置 4.判定出黃色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件 這個我想用拿來做小遊戲的驅動機制 我現在的問題是因為數位像機拍攝出來的圖片RGB誤差艇大的,不知道我該用什麼方法修正 如果不用RGB當判定依據的話 又該如何在一開始確定出四種顏色的範圍座標呢 新手請多多包含><... 發表人 - visuala 於 2003/11/15 18:09:52
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-16 15:19:04 IP:140.135.xxx.xxx 未訂閱
visuala您好: 請參考下面的code,找出紅色的
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 int R=GetRValue(Image1->Canvas->Pixels[X][Y]);
 int G=GetGValue(Image1->Canvas->Pixels[X][Y]);
 int B=GetBValue(Image1->Canvas->Pixels[X][Y]);
 //Form1->Caption=IntToStr(R)+" "+IntToStr(G)+" "+IntToStr(B);//秀出RGB
 TImageProcess* YCRCB=new TImageProcess();
 float* YCrCbPtr=YCRCB->RGB2YCrCb(R,G,B);
 int Y1=YCrCbPtr[0];
 int Cr=YCrCbPtr[1];
 int Cb=YCrCbPtr[2];
 Form1->Caption=IntToStr(Y1)+" "+IntToStr(Cr)+" "+IntToStr(Cb);//秀出YCrCb
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Graphics::TBitmap* BMP = new Graphics::TBitmap();
 BMP->Assign(Image1->Picture);
 Byte* ptr=NULL;
 for (int y=0;yHeight ;y++)
 {
  ptr=(Byte*)BMP->ScanLine[y];
  for (int x=0;xWidth ;x++)
  {
   int R=ptr[x*3+2];
   int G=ptr[x*3+1];
   int B=ptr[x*3];
   if (B>65&&B<72&&G>65&&G<70&&R>160&&R<165) //測試後的臨界值
    ptr[x*3+2]=ptr[x*3+1]=ptr[x*3]=255;
   else
    ptr[x*3+2]=ptr[x*3+1]=ptr[x*3]=0;
  }
 }
 Image3->Picture->Assign(BMP);
 delete BMP;    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Graphics::TBitmap* BMP = new Graphics::TBitmap();
 BMP->Assign(Image1->Picture);
 Byte* ptr=NULL;
 for (int y=0;yHeight ;y++)
 {
  ptr=(Byte*)BMP->ScanLine[y];
  for (int x=0;xWidth ;x++)
  {
   int R=ptr[x*3+2];
   int G=ptr[x*3+1];
   int B=ptr[x*3];
   TImageProcess* YCrCb=new TImageProcess();
   float* YCrCbPtr= YCrCb->RGB2YCrCb(R,G,B);
   int Cr=YCrCbPtr[1];
   int Cb=YCrCbPtr[2];       if (Cr>113&&Cr<115&&Cb>174&&Cb<177)
    ptr[x*3+2]=ptr[x*3+1]=ptr[x*3]=255;
   else
    ptr[x*3+2]=ptr[x*3+1]=ptr[x*3]=0;
  }
 }
 Image2->Picture->Assign(BMP);
 delete BMP;
 delete YCrCb;
}
效果如下圖所示 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
visuala
一般會員


發表:33
回覆:39
積分:14
註冊:2003-04-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-16 15:35:00 IP:218.170.xxx.xxx 未訂閱
多謝 我先試一下看看~
系統時間:2024-05-06 15:20:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!