[問題] 讀灰階影像的問題(灰階值錯誤)

看板C_Sharp (C#)作者 (Tim On Five)時間12年前 (2012/09/28 22:53), 編輯推噓3(3012)
留言15則, 9人參與, 最新討論串1/6 (看更多)
大家好!我目前正在使用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

09/28 23:50, , 1F
灰階影像會有rgb這三個東西嗎 就只是個0~255的值
09/28 23:50, 1F

09/28 23:57, , 2F
就程式碼來說 我看到限定彩色轉灰階
09/28 23:57, 2F

09/29 02:55, , 3F
那請問要如何讀取8-bit灰階影像至陣列中呢@@?
09/29 02:55, 3F

09/29 03:41, , 4F
把你的jpg檔給大家看看 另外灰階的jpg檔 其實還是有rgb
09/29 03:41, 4F

09/29 03:41, , 5F
只是每個pixel的R=G=B而已 所以你任抓R.G.B其中一者
09/29 03:41, 5F

09/29 03:41, , 6F
不用再三者相加/3了
09/29 03:41, 6F

09/29 03:44, , 7F
而且rgb相加/3也不是很正確的轉換方式 只是概略計算
09/29 03:44, 7F

09/29 09:35, , 8F
09/29 09:35, 8F

09/29 10:54, , 9F
我電腦跑都一樣啊= =
09/29 10:54, 9F

09/29 22:00, , 10F
我猜應該是Color.R Color.G Color.B的關係吧
09/29 22:00, 10F

09/30 01:05, , 11F
因為你原圖 "本來" 就只有 16 階顏色吧..
09/30 01:05, 11F

10/02 13:03, , 12F
灰階公式應該用錯了 是R*0.299+B*0.587+G*0.114
10/02 13:03, 12F

10/02 23:57, , 13F
grayvalue[,]= color.GetBrightness;// try it
10/02 23:57, 13F

10/04 23:52, , 14F
我用unsafe去做R*0.3+G*0.59+B*0.11 值也都是17倍數
10/04 23:52, 14F

10/04 23:58, , 15F
大概找到問題 請改用LockBits方法
10/04 23:58, 15F
文章代碼(AID): #1GPRddg2 (C_Sharp)
文章代碼(AID): #1GPRddg2 (C_Sharp)