Re: [問題] 關於灰階影像處理..

看板java作者 (淺水中)時間17年前 (2006/12/13 17:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串10/12 (看更多)
※ 引述《Pistachi.bbs@mobbs.stut.edu.tw ()》之銘言: : ※ calais007.bbs@ptt.cc (淺水中) 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)
文章代碼(AID): #15Vy5WSA (java)
討論串 (同標題文章)
文章代碼(AID): #15Vy5WSA (java)