原圖
一、灰度算法
彩色照片每一個像素的顏色值由紅、綠、藍(lán)三種值混合而成,紅綠藍(lán)的取值分別由很多種,于是像素的顏色值也可以有很多種顏色值,這就是彩色圖片的原理,而灰度照片則只有256種顏色,一般的處理方法是將圖片顏色值的RGB三個通道值設(shè)為一樣,這樣圖片的顯示效果就會是灰色。
灰度處理一般有三種算法:
下面是加權(quán)平均值法的Ruby實現(xiàn):
#灰度化圖片 #取RGB三色平均值 def self.grey(bmp) for i in 0 .. bmp.height - 1 for j in 0 .. bmp.width - 1 rgb = bmp.getRGB(i, j) grey = rgb.r.to_f * 0.3+rgb.g.to_f *0.59 +rgb.b.to_f * 0.11.to_i bmp.setRGB(i, j, RGB.new(grey, grey, grey)) end end end
灰度效果:
二、二值化
圖像二值化就是將圖像上的像素點的灰度值設(shè)置為0或255,也就是將整個圖像呈現(xiàn)出明顯的黑白效果。所有灰度大于或等于閾值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。
圖像二值化常常用于破解驗證碼等圖片識別應(yīng)用上
#二值化圖片 #小于一定閾值設(shè)為0 0 0,大于設(shè)置為255 255 255 def self.binarization(bmp) imageGreyLevel = bmp.getGreyLevel for i in 0 .. bmp.height - 1 for j in 0 .. bmp.width - 1 rgb = bmp.getRGB(i, j) if rgb.getGreyLevelimageGreyLevel bmp.setRGB(i, j, RGB.new(0, 0, 0)) else bmp.setRGB(i, j, RGB.new(255, 255, 255)) end end end end
二值化效果
三、底片
底片效果的實現(xiàn)很簡單,就是將RGB的每一個通道值取反,就是用255去減
#底片化圖片 #RGB取反色255- def self.contraryColor(bmp) for i in 0 .. bmp.height - 1 for j in 0 .. bmp.width - 1 rgb = bmp.getRGB(i, j) bmp.setRGB(i, j, rgb.getContrary) end end end
底片效果
四、浮雕效果
浮雕的算法相對復(fù)雜一些,用當(dāng)前點的RGB值減去相鄰點的RGB值并加上128作為新的RGB值。由于圖片中相鄰點的顏色值是比較接近的,因此這樣的算法處理之后,只有顏色的邊沿區(qū)域,也就是相鄰顏色差異較大的部分的結(jié)果才會比較明顯,而其他平滑區(qū)域則值都接近128左右,也就是灰色,這樣
就具有了浮雕效果。
在實際的效果中,這樣處理后,有些區(qū)域可能還是會有”彩色”的一些點或者條狀痕跡,所以最好再對新的RGB值做一個灰度處理。
#浮雕效果 #浮雕的算法相對復(fù)雜一些,用當(dāng)前點的RGB值減去相鄰點的RGB值并加上128作為新的RGB值。由于圖片中相鄰點的顏色值是比較接近的, #因此這樣的算法 處理之后,只有顏色的邊沿區(qū)域,也就是相鄰顏色差異較大的部分的結(jié)果才會比較明顯,而其他平滑區(qū)域則值都接近128左右, #也就是灰色,這樣就具有了浮雕效果。 #在實際的效果中,這樣處理后,有些區(qū)域可能還是會有”彩色”的一些點或者條狀痕跡,所以最好再對新的RGB值做一個灰度處理。 def self.emboss(bmp) preRGB=RGB.new(128, 128, 128) for i in 0 .. bmp.height - 1 for j in 0 .. bmp.width - 1 currentRGB=bmp.getRGB(i, j) r=(currentRGB.r-preRGB.r)*1+128 g=(currentRGB.g - preRGB.g)*1+128 b=(currentRGB.b-preRGB.b)*1+128 bmp.setRGB(i, j, RGB.new(r,g,b).getGreyRGB) preRGB = currentRGB end end end
浮雕效果
項目主頁
geekeren/RubyImageProcess
標(biāo)簽:鄂州 淄博 六安 河北 自貢 松原 石嘴山 宜春
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby實現(xiàn)的圖片濾鏡算法代碼》,本文關(guān)鍵詞 Ruby,實現(xiàn),的,圖片,濾鏡,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。