看板 C_Sharp 關於我們 聯絡資訊
大家好!我目前正在使用C#學習有關影像處理的程式撰寫。 目前遇到一個問題困擾我很久,請各位解答一下,如下: Bitmap bimage = new Bitmap("test.jpg"); int[,] grayData = new int[bimage.Width, bimage.Height]; for (int y = 0; y < bimage.Height; y++) { for (int x = 0; x < bimage.Width; x++) { Color color = bimage.GetPixel(x, y); grayData[x, y] = (color.R + color.G + color.B) / 3; } } 測試影像為8-bit的灰階影像,為何抓出來的灰階值(grayData中)都是17的倍數?? 抓出來的灰階值都與原圖不一樣,都是:0, 51, 102, 153, 238...等等(17的倍數?) 如果是24-bit彩色影像就沒這樣的問題,我在網路搜尋都沒有這相關的文章! 可能是非常基本的問題! >"< 請各位幫忙提示一下 @@" 感激不盡! 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.184.86
killer1121:灰階影像會有rgb這三個東西嗎 就只是個0~255的值 09/28 23:50
killer1121:就程式碼來說 我看到限定彩色轉灰階 09/28 23:57
timon:那請問要如何讀取8-bit灰階影像至陣列中呢@@? 09/29 02:55
erspicu:把你的jpg檔給大家看看 另外灰階的jpg檔 其實還是有rgb 09/29 03:41
erspicu:只是每個pixel的R=G=B而已 所以你任抓R.G.B其中一者 09/29 03:41
erspicu:不用再三者相加/3了 09/29 03:41
erspicu:而且rgb相加/3也不是很正確的轉換方式 只是概略計算 09/29 03:44
timon:jpg檔案: http://140.115.60.152/download/test.jpg 09/29 09:35
qqwwee33:我電腦跑都一樣啊= = 09/29 10:54
tongzhou:我猜應該是Color.R Color.G Color.B的關係吧 09/29 22:00
iterator:因為你原圖 "本來" 就只有 16 階顏色吧.. 09/30 01:05
sand1050:灰階公式應該用錯了 是R*0.299+B*0.587+G*0.114 10/02 13:03
laevatain103:grayvalue[,]= color.GetBrightness;// try it 10/02 23:57
Ethan96:我用unsafe去做R*0.3+G*0.59+B*0.11 值也都是17倍數 10/04 23:52
Ethan96:大概找到問題 請改用LockBits方法 10/04 23:58