Re: [問題] 關於灰階影像處理..
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 10 之 12 篇):