visuala
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:33 回覆:39 積分:14 註冊:2003-04-01
發送簡訊給我
|
各位大大 不好意思 我想請問一下..
圖片中本來有黃,藍,紅,綠四個區域...
<<原圖>>
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=12658359&CC=283101)
另一張圖片則是加入了一個粉紅色的圓圈
<<外來物進來>>
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=12658046&CC=283094) 最後我要用CCD來拍攝, 但是我想我先用數位像機拍攝幾張圖做辨識的測試
我要做到的目標是
1.把拍攝照片的原圖確定出四種顏色的範圍 2.然後手指戴一個粉紅色的圓圈進入原圖,進入後的圖就是像加了粉紅色的圈圈 3.因為之前已經訂出了原圖的四種顏色所在範圍,便可以馬上找出粉紅色現在的位置 4.判定出粉紅色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件
這個我想用拿來做小遊戲的驅動機制 我現在的問題是因為數位像機拍攝出來的圖片RGB誤差艇大的,不知道我該用什麼方法修正
如果不用RGB當判定依據的話 又該如何在一開始確定出四種顏色的範圍呢 麻煩各位大大跟我指點一下 謝謝~ 發表人 - visuala 於 2003/11/12 21:44:30
|
taishyang
站務副站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/download.php?download=upload/462c1ab02cd1c_Pic.jpg) 發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
visuala您好:
是否方便上傳實際情況的圖片呢? 順心
|
visuala
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:33 回覆:39 積分:14 註冊:2003-04-01
發送簡訊給我
|
引言:
visuala您好:
是否方便上傳實際情況的圖片呢? 順心
>>< face="Verdana, Arial, Helvetica">
不好意思 我現在手邊剛好沒有像機和實際照片 我再補傳..><...
那就理論來說的話..該從何下手呢..可以用濾波來解決嗎? 發表人 - visuala 於 2003/11/12 22:02:08
|
taishyang
站務副站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/download.php?download=upload/462c1ab02cd1c_Pic.jpg) 發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
visuala您好:
引言:
3.因為之前已經訂出了原圖的四種顏色所在範圍,便可以馬上找出粉紅色現在的位置
4.判定出粉紅色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件
何不直接找出粉紅色的位置呢?
為了抵抗光線的影響,大部分都是轉到HSV,HSI,或者是YCrCb這些把亮度獨立出
來的色彩模型 順心
|
visuala
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:33 回覆:39 積分:14 註冊:2003-04-01
發送簡訊給我
|
我要驅動的事件何不直接找出粉紅色的位置呢?
為了抵抗光線的影響,大部分都是轉到HSV,HSI,或者是YCrCb這些把亮度獨立出
來的色彩模型 順心 ![]()
------------------------------------------------------- 不好意思 我傳兩張實際用像機拍出來的圖...麻煩幫我看看
<<原圖>>
< src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=12699675&CC=284025">
<<加入手指的圖>>
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=12699988&CC=284032) PS:1.顏色我是任舉來測試的 所以如果要改可以再換
2.我是想用邊邊的黑點來幫助邊界判定 不要可以刪除 //-----------我的目標是---------//
1.把拍攝照片的<<原圖>>確定出四種顏色的區域範圍(座標) 2.然後手指戴一個黃色的圓圈進入<<原圖>>,進入後的圖就是像加了黃色的圈圈--<<加入手指的圖>> 3.因為之前已經訂出了<<原圖>>的四種顏色所在範圍,便可以馬上找出黃色現在的位置 4.判定出黃色的位置之後,看有沒有在四種顏色的範圍內,如果有的話 便驅動我要驅動的事件 這個我想用拿來做小遊戲的驅動機制 我現在的問題是因為數位像機拍攝出來的圖片 RGB誤差艇大的,不知道我該用什麼方法修正
如果不用RGB當判定依據的話 又該如何在一開始確定出四種顏色的範圍座標呢 新手請多多包含><... 發表人 - visuala 於 2003/11/15 18:09:52
|
taishyang
站務副站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/download.php?download=upload/462c1ab02cd1c_Pic.jpg) 發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
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;
}
效果如下圖所示
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=12702805&CC=284095) 順心 ![]() <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
visuala
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:33 回覆:39 積分:14 註冊:2003-04-01
發送簡訊給我
|
|