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

看板C_and_CPP作者 (鬼翼&娃娃魚)時間16年前 (2009/04/09 15:52), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串5/5 (看更多)
※ 引述《devilrucifer (devilrucifer)》之銘言: : ※ 引述《VictorTom (鬼翼&娃娃魚)》之銘言: : : 理論上, 後面這個比較精確, 常見的做法還會加一個四捨五入的0.5 : : 但是, 在CPU上, 甚至一些embbed system, 前者會算的比較快.... : : 有一個折衷的方案是: : : gray = (R*299 + G*587 + B*114 + 500) / 1000; : 不好意思我在請問一下一個問題, : 請問這一邊加0.5四捨五入的用意是什麼呢? : 是怕數值超過255嗎? 不是, 就是四捨五入啊.... 原本那個公式(#2)gray算出的結果是個浮點數.... 如果算出gray = 123.123 這樣的結果.... 整數化要在0-255間, gray您要當它是123還是124呢?? 又, 如果是123.876勒:) 如果是用#1那個/256的方法, 就不用考慮四捨五入了.... : 小弟是試過有加跟沒加都可以正常執行, : 也看過有人沒加0.5而是在後面追加 : : if(gray>255)gray=255; : if(gray<0)gray=0; 這個才是在做邊界判斷, 比如算noise時有可能會超過.... 那就有需要在算完的gray level加上邊界判斷.... 有時候術語我們把它稱為 clamp . : 請問這幾個在執行上有甚麼差異嗎? : 在此先謝謝各位版友。 以你的RGB轉灰階, 只要input的RGB值確定都會在0-255間.... 公式算出來(就算加0.5四捨五入)理論上都不會超過0-255.... 所以你的這個case如果不加邊界判斷也無所謂.... 覺得不必要, 但是有怕哪天有意外會出錯.... 為了方便debug, 可以試試看用 assert(gray >= 255 && gray <= 0); (請自己找一下assert的用法, 如果您在意這個的話, 不然就別管它吧) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.66.243.96 ※ 編輯: VictorTom 來自: 61.66.243.96 (04/09 15:53)

04/09 18:18, , 1F
真的太感謝您了^^ 小弟有豁然開朗的感覺 謝謝
04/09 18:18, 1F

04/09 18:39, , 2F
慘了~~是 (gray <= 255 && gray >= 0) 才對....Orz
04/09 18:39, 2F
文章代碼(AID): #19tQah58 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19tQah58 (C_and_CPP)