作者timon (Tim On Five)
看板C_Sharp
标题[问题] 读灰阶影像的问题(灰阶值错误)
时间Fri Sep 28 22:53:24 2012
大家好!我目前正在使用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
1F:→ killer1121:灰阶影像会有rgb这三个东西吗 就只是个0~255的值 09/28 23:50
2F:→ killer1121:就程式码来说 我看到限定彩色转灰阶 09/28 23:57
3F:→ timon:那请问要如何读取8-bit灰阶影像至阵列中呢@@? 09/29 02:55
4F:→ erspicu:把你的jpg档给大家看看 另外灰阶的jpg档 其实还是有rgb 09/29 03:41
5F:→ erspicu:只是每个pixel的R=G=B而已 所以你任抓R.G.B其中一者 09/29 03:41
6F:→ erspicu:不用再三者相加/3了 09/29 03:41
7F:→ erspicu:而且rgb相加/3也不是很正确的转换方式 只是概略计算 09/29 03:44
9F:→ qqwwee33:我电脑跑都一样啊= = 09/29 10:54
10F:→ tongzhou:我猜应该是Color.R Color.G Color.B的关系吧 09/29 22:00
11F:→ iterator:因为你原图 "本来" 就只有 16 阶颜色吧.. 09/30 01:05
12F:→ sand1050:灰阶公式应该用错了 是R*0.299+B*0.587+G*0.114 10/02 13:03
13F:推 laevatain103:grayvalue[,]= color.GetBrightness;// try it 10/02 23:57
14F:推 Ethan96:我用unsafe去做R*0.3+G*0.59+B*0.11 值也都是17倍数 10/04 23:52
15F:推 Ethan96:大概找到问题 请改用LockBits方法 10/04 23:58