作者calais007 (浅水中)
看板java
标题Re: [问题] 关於灰阶影像处理..
时间Wed Dec 13 13:01:57 2006
※ 引述《devlish (灰色地带)》之铭言:
: ※ 引述《[email protected] ()》之铭言:
: : 提供一个方法 很久以前写的
: : 变数的命名实在是...自已都要看不懂噜
: : 总之把这当黑盒子用就好..
: : 不要管里面写什麽了XD
: : BufferedImage -> double[][]
: : -----------------------------------------------------
: : double[][] transfer(BufferedImage img){
: : int w=img.getWidth();
: : int h=img.getHeight();
: : int X3_1=0;
: : int X3_2=0;
: : double[][] temp = new double[h][w*3];
: : double[] a=img.getRaster().getPixels(0, 0, w, h, a);
: : for(int j=0;j<h;j++){
: : for(int i=0;i<w;i++){
: : X3_1=(j*w+i)*3;
: : X3_2=i*3;
: : temp[j][X3_2]=a[X3_1];
: : temp[j][X3_2+1]=a[X3_1+1];
: : temp[j][X3_2+2]=a[X3_1+2];
: : }
: : }
: : return temp;
: : }
: : m*[1;37;40m-----------------------------------------------------*[m*[mm
: : m*[1;37;40m-----------------------------------------------------*[m*[mm
: : 转灰阶
: : void doGray(double[][] da,int x ,int y,int w,int h){
: : int X3=0;
: : int gray=0;
: : 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;
: : }
: : }
: : }
: : m*[1;37;40m-----------------------------------------------------*[m*[mm
: 请问,如果以用BufferImage来做处理为概念,要将小弟所写的上面的程式码继续往下写
: 先将Load的图片转为灰阶,然後再将其中的影像转为二维的灰阶阵列,并且将结果与原先
: 的图片一同显示於两个不同的window,也就是说,除了原先显示的图片之外,还要多显示
: 一个处理过的灰阶影像图片(已抓到Pixel值的)
: 小弟在书上看到一个Utilities的方法,但试下来的结果就只有
: image=Utilities.makeBufferedImage(image);
: 这一条成功而已,而且原先会显示的Pixel值也不再显示了.......= "=
: 上面的叙述有点乱,可能因为我的脑袋也是一团乱....
: 想请教,以这样的叙述下来,有什麽好的方法可以呈现出来....
基本上我有几点觉得很困惑
1.为什麽一定要转成二维的来做灰阶?
你的演算法真的是做灰阶吗?我看起来觉得不像
我的感觉是在做矩阵运算
是在做RGB转成Y,Cb,Cr的运算吧!
gray应该是RGB三个值要相等
你的怎麽算也不会相等
2.你要画两张图
为什麽不一开始先把原图就直接画出来
做完图型运算後再把结果画出来
这样就会很完美的显示两张图了阿
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.105.36