作者calais007 (浅水中)
看板java
标题Re: [问题] 关於灰阶影像处理..
时间Wed Dec 13 17:16:41 2006
※ 引述《[email protected] ()》之铭言:
: ※ [email protected] (浅水中) wrote:
: > 基本上我有几点觉得很困惑
: > 1.为什麽一定要转成二维的来做灰阶?
: > 你的演算法真的是做灰阶吗?我看起来觉得不像
: > 我的感觉是在做矩阵运算
: > 是在做RGB转成Y,Cb,Cr的运算吧!
: > gray应该是RGB三个值要相等
: > 你的怎麽算也不会相等
: > 2.你要画两张图
: > 为什麽不一开始先把原图就直接画出来
: > 做完图型运算後再把结果画出来
: > 这样就会很完美的显示两张图了阿
: 转灰阶公式Gray = 0.299 * R + 0.587 * G + 0.114 * B
: 以下就是在做转灰阶不是吗?
: for(int j=y;j<h;j++){
: for(int i=x;i<w;i++){
: X3=i*3;
: gray=(int)(0.299*da[j][X3]+0.587*da[j][X3+1]+0.114*da[j][X3+2]);
: da[j][X3]=da[j][X3+1]=da[j][X3+2]=gray;
: }
: }
: 是先转成二维 再做灰阶
: 我之前在做影像处理 需要详细的Pixel值 才会想要先转成二维
: 不然转灰阶 我记得有现成的方法可以用吧= =?
好吧,後来想想Y(亮度)当灰阶来看也没啥不对
但也没必要用二维
int r,g,b,Y;
for (int i =0 ; i<pixels.length;i++){
r = (pixels[i]>>16) & 0xff;
g = (pixels[i]>>8) & 0xff;
b = (pixels[i]) & 0xff;
Y = (int) 0.299 * r + 0.587 * g + 0.114 * b;
gray[i] = (Y << 16)| (Y << 8)| Y | 0xff000000;
}
然後利用BufferedImage.setRGB(0,0,w,h,gray,0,w);
这样就可以很轻易的得到新的BufferedImage
: 至於第二个问题 我记得java对於物件是传参照吧
: 如果直接对传进来的图片修改 那原图也会被更改到
你图都画出去了,没有理由画出去的图会被改变
除非你很care原使资料
就算如此
开一个一样大的BufferedImage然後利用setRGB把算出来的Gray设上去也不困难吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.105.36
※ 编辑: calais007 来自: 140.123.105.36 (12/13 17:20)