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

如何合併Cb與Cr顯示圖像

尚未結案
keikojason
初階會員


發表:37
回覆:63
積分:45
註冊:2004-05-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-02 17:15:34 IP:218.169.xxx.xxx 未訂閱
請問前輩一般圖像可以分為R,G,B再把他轉成Y,Cb,Cr,如果只要呈現Cb與Cr合併的影像,不要有Y那要怎樣用呢?,因為想要將Cb,Cr部份影像先作處理,到最後才要將以下程式是將Y,Cb,Cr分別出來:那要怎麼修改,是要把Cb&&Cr起來在顯示圖嘛?還是要用另一種的宣告?請前輩指教~~~初學者留
 
Graphics::TBitmap *YBmp = new Graphics::TBitmap();
Graphics::TBitmap *CbBmp = new Graphics::TBitmap();
Graphics::TBitmap *CrBmp = new Graphics::TBitmap();
 YBmp->Assign(Image1->Picture->Bitmap);
 CbBmp->Assign(Image1->Picture->Bitmap);
 CrBmp->Assign(Image1->Picture->Bitmap);
 for(int i=0;iHeight;i   )
 {
  ptr = (Byte *)Bmp->ScanLine[i];
  Yptr  = (Byte *)YBmp->ScanLine[i];
  Cbptr = (Byte *)CbBmp->ScanLine[i];
  Crptr = (Byte *)CrBmp->ScanLine[i];
  for(int j=0;jWidth; j  )
  {
   b=ptr[j*3];
   g=ptr[j*3 1];
   r=ptr[j*3 2];      y = 0.299*r 0.587*g 0.114*b;
  cr = 0.5*r-0.419*g-0.081*b 128;
  cb = -0.169*r-0.332*g 0.5*b 128;      Yptr[j*3]  =y;
  Yptr[j*3 1]=y;
  Yptr[j*3 2]=y;
  Cbptr[j*3]  =cb;
  Cbptr[j*3 1]=cb;
  Cbptr[j*3 2]=cb;
  Crptr[j*3]  =cr;
  Crptr[j*3 1]=cr;
  Crptr[j*3 2]=cr;
Image2->Picture->Assign(YBmp);
Image3->Picture->Assign(CbBmp);
Image4->Picture->Assign(CrBmp);
Image2->Show();
Image3->Show();
Image4->Show();
delete YBmp,CbBmp,CrBmp;
//-------------------------------------------------------------------
//紅色部分另外試用方式【把Cb&&Cr起來】
//Image5->Picture->Assign((*CrBmp)&&(*CbBmp)); <==不過這樣宣告有問題
keikojason
初階會員


發表:37
回覆:63
積分:45
註冊:2004-05-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-04 00:11:30 IP:218.169.xxx.xxx 未訂閱
除了以上的問題以外,再請問前輩如果要在一張圖像中要找到可能是眼睛的部分,那要怎樣處理啊~~想說人們眼睛大多是黑色與白色,就將Y,Cb,Cr設為0,0,0或255,255,255,不過用上面那個基本程式部分改為以下程式還是取不出來,再怎麼樣也應該多多少少部分有白色,不過一整張不是全白就是全黑,請問要怎樣處理呢?? 
 
if(cr==0&&cb==0&&y==0) //像似眼睛部分為白色
  {
y=255,cr=255,cb=255;
ptr[j*3]=y;
ptr[j*3 1]cr;
ptr[j*3 2]cb;
  }
else
  {
y=0,cr=0,cb=0;   //不是部份為黑色
ptr[j*3]=y;
ptr[j*3 1]cr;
ptr[j*3 2]cb;
  }
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-05 20:38:27 IP:140.113.xxx.xxx 未訂閱
dear keikojason:
引言:請問前輩一般圖像可以分為R,G,B再把他轉成Y,Cb,Cr,如果只要呈現Cb與Cr合併的影像,不要有Y那要怎樣用呢?
呃......該說啥呢?因為Cb、Cr是轉換出來的資料,所以合併顯示???其實沒有意義吧!如果要顯示出來,通常是把Cb、Cr單獨用灰階來表示,就像你程式中這樣:
  Cbptr[j*3]  =cb;
  Cbptr[j*3 1]=cb;
  Cbptr[j*3 2]=cb;      Crptr[j*3]  =cr;
  Crptr[j*3 1]=cr;
  Crptr[j*3 2]=cr;
如果要合併顯示,那那那........真的不知道該說啥了~ 題外話~
引言:【把Cb&&Cr起來】 //Image5->Picture->Assign((*CrBmp)&&(*CbBmp)); <==不過這樣宣告有問題
也不是這樣寫,會錯是一定的~ 另外,你提到
引言:如果要在一張圖像中要找到可能是眼睛的部分,那要怎樣處理啊~~想說人們眼睛大多是黑色與白色,就將Y,Cb,Cr設為0,0,0或255,255,255
基本上觀念就有錯。因為黑與白在YCbCr下不是(0,0,0)跟(255,255,255),你把它跟RGB color space的表示搞混了,請自行驗算~~順便提一下,眼睛的找法如果是用顏色當條件,保證沒辦法找!建議你找找相關的論文吧~
系統時間:2024-05-18 16:57:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!