一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - Ruby實現的圖片濾鏡算法代碼

Ruby實現的圖片濾鏡算法代碼

2020-05-12 10:18極客人 Ruby

本文給大家分享的是使用ruby實現的幾種圖片濾鏡的算法,包括灰度、二值、底片、浮雕。非常的簡單實用,有需要的小伙伴可以參考下

原圖

Ruby實現的圖片濾鏡算法代碼

一、灰度算法

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

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

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

下面是加權平均值法的Ruby實現:

 

?
1
2
3
4
5
6
7
8
9
10
11
#灰度化圖片
#取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

灰度效果:

Ruby實現的圖片濾鏡算法代碼

二、二值化

圖像二值化就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果。所有灰度大于或等于閾值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點被排除在物體區域以外,灰度值為0,表示背景或者例外的物體區域。

圖像二值化常常用于破解驗證碼等圖片識別應用上

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#二值化圖片
 #小于一定閾值設為0 0 0,大于設置為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

二值化效果

Ruby實現的圖片濾鏡算法代碼

 三、底片

底片效果的實現很簡單,就是將RGB的每一個通道值取反,就是用255去減

?
1
2
3
4
5
6
7
8
9
10
#底片化圖片
 #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

底片效果

Ruby實現的圖片濾鏡算法代碼

四、浮雕效果

浮雕的算法相對復雜一些,用當前點的RGB值減去相鄰點的RGB值并加上128作為新的RGB值。由于圖片中相鄰點的顏色值是比較接近的,因此這樣的算法處理之后,只有顏色的邊沿區域,也就是相鄰顏色差異較大的部分的結果才會比較明顯,而其他平滑區域則值都接近128左右,也就是灰色,這樣
就具有了浮雕效果。

在實際的效果中,這樣處理后,有些區域可能還是會有”彩色”的一些點或者條狀痕跡,所以最好再對新的RGB值做一個灰度處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#浮雕效果
 #浮雕的算法相對復雜一些,用當前點的RGB值減去相鄰點的RGB值并加上128作為新的RGB值。由于圖片中相鄰點的顏色值是比較接近的,
 #因此這樣的算法 處理之后,只有顏色的邊沿區域,也就是相鄰顏色差異較大的部分的結果才會比較明顯,而其他平滑區域則值都接近128左右,
 #也就是灰色,這樣就具有了浮雕效果。
 #在實際的效果中,這樣處理后,有些區域可能還是會有”彩色”的一些點或者條狀痕跡,所以最好再對新的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

浮雕效果

Ruby實現的圖片濾鏡算法代碼

項目主頁

geekeren/RubyImageProcess

延伸 · 閱讀

精彩推薦
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
主站蜘蛛池模板: 男人女人插 | 99久久精品免费看国产 | 亚洲欧美久久久久久久久久爽网站 | 暖暖免费高清完整版观看日本 | 小草高清视频免费直播 | 黄a在线观看 | 亚洲冬月枫中文字幕在线看 | 91短视频社区在线观看 | 2022最新国产在线不卡a | 香蕉eeww99国产精选播放 | 欧美a大片 | 成人免费视频一区二区 | 视频在线观看一区二区三区 | 国内精品一区二区在线观看 | 国产精品国产香蕉在线观看网 | 精品国产三级av在线 | chinses台湾男同志hd | 日本不卡在线一区二区三区视频 | 国产精品毛片无码 | 1769最新资源站 | 国产在线观看网站 | 成人香蕉xxxxxxx | 欧式午夜理伦三级在线观看 | 欧美日韩一区二区综合 | 国产欧美日韩专区毛茸茸 | 我与么公激情性完整视频 | 亚洲国产AV一区二区三区四区 | 美女脱了内裤打开腿让你桶爽 | 亚洲天堂网站在线 | 久久精品动漫网一区二区 | 公妇乱淫在线播放免费观看 | 99re热这里只有精品视频 | 国产最新精品视频 | 国产在线观看一区 | 亚洲精品一区二区观看 | 欧美一级专区免费大片俄罗斯 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 女教师巨大乳孔中文字幕免费 | 视频在线播放 | 日本成人免费在线视频 | 日本人交换乱理伦片 |