Re: [問題] 關於RGB轉灰階的程式碼問題

看板C_and_CPP (C/C++)作者 (我愛ASM)時間16年前 (2009/04/09 00:23), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串3/5 (看更多)
※ 引述《devilrucifer (devilrucifer)》之銘言: : 各位板大好: : 小弟因為最近剛開始學影像處理,所以有很多東西不懂, : 在此想請教一下各位先進關於灰階轉換的問題,常見的兩種的算式 : Gray=(B*28+G*151+R*77)/256 : OR : gray=R*0.299+G*0.587+B*0.114 : 請問要用哪一種會比較精準,還是是沒差的呢? : 還有想請教為什麼RGB要乘於那些係數呢? : 最後除以256是為什麼呢?灰階不是只有0-255? : 還有小弟有看過這種程式碼 連來信一併回答: 要用那個看你自己,我原來po用的是第一個算式,沒啥原 因,就是簡單而已。 因為第一式等效於 Gray=(B*28+G*151+R*77) >> 8 如果 你的除數不是 2的幕次方,那用第二個即可。如果圖像解 析度頗高,這樣算可以多多少少榨一點效能出來。 下面這個是 Gray = (R+B+G)/3 也算灰階,只是實際上由 於sensor對於RGB 波常感受不同,所以會有權重之分。單 純的平均無法表現各色對灰階的影響。但也不是不能用就 是了。 : : //--------------------------------------------------------------------------- : void __fastcall TForm1::Button3Click(TObject *Sender) : { : int x,y,graylevel; : for(y=1;y<=Image1->Height;y++) : { : for(x=1;x<=Image1->Picture->Width;x++) : { : TCColor c=Image1->Canvas->Pixels[x][y]; : graylevel=((int)c.Red+(int)c.Green+(int)c.Blue)/3; : Image1->Canvas->Pixels[x][y]=TCColor(graylevel,graylevel,graylevel).Color; : } : } : } : //--------------------------------------------------------------------------- : : 請問為什麼程式碼可以這樣寫,他的意思是什麼?RGB加起來除以3也是灰階嗎? : 煩請有空的版友撥空回覆一下小弟,小弟感激不盡。 -- 不要問我從哪來,我只是一個浪跡天涯的工程師.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.132.20.82

04/09 00:29, , 1F
轉錯邊了..
04/09 00:29, 1F

04/09 00:39, , 2F
XD 不過我以前也幹過係數乘1024然後結果>>10的....:)
04/09 00:39, 2F

04/09 01:06, , 3F
感謝大大回文
04/09 01:06, 3F

04/09 01:49, , 4F
而且權重也有不同 通常 BT601 居多 不過也有人用 Lumb 比
04/09 01:49, 4F
※ 編輯: MasterChang 來自: 140.132.20.82 (04/09 02:34)
文章代碼(AID): #19tCzkEq (C_and_CPP)
文章代碼(AID): #19tCzkEq (C_and_CPP)