欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ruby實現(xiàn)的圖片濾鏡算法代碼

 更新時間:2017年01月04日 08:46:11   作者:極客人  
本文給大家分享的是使用ruby實現(xiàn)的幾種圖片濾鏡的算法,包括灰度、二值、底片、浮雕。非常的簡單實用,有需要的小伙伴可以參考下

原圖


一、灰度算法

彩色照片每一個像素的顏色值由紅、綠、藍三種值混合而成,紅綠藍的取值分別由很多種,于是像素的顏色值也可以有很多種顏色值,這就是彩色圖片的原理,而灰度照片則只有256種顏色,一般的處理方法是將圖片顏色值的RGB三個通道值設(shè)為一樣,這樣圖片的顯示效果就會是灰色。

灰度處理一般有三種算法:

  1. 最大值法:即新的顏色值R=G=B=Max(R,G,B),這種方法處理后的圖片看起來亮度值偏高。
  2. 平均值法:即新的顏色值R=G=B=(R+G+B)/3,這樣處理的圖片十分柔和
  3. 加權(quán)平均值法:即新的顏色值R=G=B=(R * Wr+G*Wg+B*Wb),一般由于人眼對不同顏色的敏感度不一樣,所以三種顏色值的權(quán)重不一樣,一般來說綠色最高,紅色其次,藍色最低,最合理的取值分別為Wr = 30%,Wg = 59%,Wb = 11%

下面是加權(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.getGreyLevel<imageGreyLevel
     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

相關(guān)文章

  • Ruby3多線程并行Ractor使用方法詳解

    Ruby3多線程并行Ractor使用方法詳解

    這篇文章主要介紹了Ruby3多線程并行Ractor使用方法詳解,Ruby3之前使用Thread來創(chuàng)建新線,Ruby3通過Ractor支持真正的多線程并行,多個Ractor之間可并行獨立運行程,需要的朋友可以參考下
    2022-04-04
  • Ruby基礎(chǔ)知識之?dāng)?shù)據(jù)類型

    Ruby基礎(chǔ)知識之?dāng)?shù)據(jù)類型

    這篇文章主要介紹了Ruby基礎(chǔ)知識之?dāng)?shù)據(jù)類型,本文講解了數(shù)值類型、字符串類型、字符類型、哈希類型、范圍類型、對象標(biāo)識、對象的類、類型等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 剖析 rudy 訪問控制

    剖析 rudy 訪問控制

    剖析 rudy 訪問控制...
    2007-11-11
  • Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例

    Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例

    這篇文章主要介紹了Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例,本文通過FreeTDS實現(xiàn),同時介紹了在ActiveRecord上使用Tiny_TDS的技巧,需要的朋友可以參考下
    2014-11-11
  • Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記

    Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記

    Ruby是具有面向?qū)ο筇匦缘木幊陶Z言,這里整理了一些Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記,包括類與方法等基本的面向?qū)ο笠氐闹R,需要的朋友可以參考下
    2016-05-05
  • Redis集群搭建全記錄

    Redis集群搭建全記錄

    本文給大家總結(jié)了redis集群的概念等基礎(chǔ)知識,以及個人在搭建redis集群是所遇到的問題及解決方法,非常的詳細,有需要的小伙伴可以參考下
    2017-09-09
  • Ruby on Rails中Rack中間件的基礎(chǔ)學(xué)習(xí)教程

    Ruby on Rails中Rack中間件的基礎(chǔ)學(xué)習(xí)教程

    Rack是一個連接Ruby程序與服務(wù)器程序之間的中間件,甚至可以說Rails也是在Rack的基礎(chǔ)上建立起來的,這里我們就來為大家?guī)鞷uby on Rails中Rack中間件的基礎(chǔ)學(xué)習(xí)教程
    2016-06-06
  • Ubuntu系統(tǒng)安裝Ruby語言的三種方法

    Ubuntu系統(tǒng)安裝Ruby語言的三種方法

    這篇文章主要介紹了Ubuntu系統(tǒng)安裝Ruby語言的三種方法,本文講解了使用apt-get安裝、使用brightbox ppa倉庫安裝、使用RVM安裝3種方法,需要的朋友可以參考下
    2015-01-01
  • 深入理解Ruby中的代碼塊block特性

    深入理解Ruby中的代碼塊block特性

    聽到代碼塊這個翻譯,你或許會聯(lián)想到類或者結(jié)構(gòu)體,但block并不是這些東西,這里就帶著大家來深入理解Ruby中的代碼塊block特性
    2016-05-05
  • Ruby包管理器gem常用命令

    Ruby包管理器gem常用命令

    這篇文章主要介紹了Ruby包管理器gem常用命令,本文講解了獲取幫助、查詢可用包、安裝軟件、查詢已安裝軟件、卸載軟件等常用命令,需要的朋友可以參考下
    2015-04-04

最新評論