搜尋
首頁後端開發php教程Ruby實現的圖片濾鏡演算法程式碼
Ruby實現的圖片濾鏡演算法程式碼Dec 05, 2017 pm 02:38 PM
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實作:


 #灰度化图片
 #取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

#灰階效果:


二、二值化

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

圖像二值化常用於破解驗證碼等圖片辨識應用程式上

#
#二值化图片
 #小于一定阈值设为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

二值化效果


 三、底片

#底片效果的實作很簡單,就是將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

底片效果




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

就具有了浮雕效果。 在實際的效果中,這樣處理後,有些區域可能還是會有」彩色」的一些點或條狀痕跡,所以最好再對新的RGB值做一個灰階處理。

#浮雕效果
 #浮雕的算法相对复杂一些,用当前点的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實作的圖片濾鏡演算法程式碼,希望對大家有幫助。 ######相關建議:#########談談CSS濾鏡的詳細介紹################CSS3實作濾鏡效果的實例詳解# ###########HTML5實作一個圖片濾鏡效果的範例程式碼分享#######

以上是Ruby實現的圖片濾鏡演算法程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
基于因果森林算法的决策定位应用基于因果森林算法的决策定位应用Apr 08, 2023 am 11:21 AM

译者 | 朱先忠​审校 | 孙淑娟​在我之前的​​博客​​中,我们已经了解了如何使用因果树来评估政策的异质处理效应。如果你还没有阅读过,我建议你在阅读本文前先读一遍,因为我们在本文中认为你已经了解了此文中的部分与本文相关的内容。为什么是异质处理效应(HTE:heterogenous treatment effects)呢?首先,对异质处理效应的估计允许我们根据它们的预期结果(疾病、公司收入、客户满意度等)选择提供处理(药物、广告、产品等)的用户(患者、用户、客户等)。换句话说,估计HTE有助于我

Mango:基于Python环境的贝叶斯优化新方法Mango:基于Python环境的贝叶斯优化新方法Apr 08, 2023 pm 12:44 PM

译者 | 朱先忠审校 | 孙淑娟引言模型超参数(或模型设置)的优化可能是训练机器学习算法中最重要的一步,因为它可以找到最小化模型损失函数的最佳参数。这一步对于构建不易过拟合的泛化模型也是必不可少的。优化模型超参数的最著名技术是穷举网格搜索和随机网格搜索。在第一种方法中,搜索空间被定义为跨越每个模型超参数的域的网格。通过在网格的每个点上训练模型来获得最优超参数。尽管网格搜索非常容易实现,但它在计算上变得昂贵,尤其是当要优化的变量数量很大时。另一方面,随机网格搜索是一种更快的优化方法,可以提供更好的

为什么 Python、Ruby 等语言弃用了自增运算符?为什么 Python、Ruby 等语言弃用了自增运算符?May 11, 2023 pm 04:37 PM

许多人也许会注意到一个现象,那就是在一些现代编程语言(当然,并不是指“最近出现”的编程语言)中,自增和自减运算符被取消了。也就是说,在这些语言中不存在​​i++​​​或​​j--​​​这样的表达,而是只存在​​i+=1​​​或​​j-=1​​这样的表达方式了。本回答将从设计哲学这个角度上探讨这一现象产生的背景与原因。严格来说,说"i++正在消失"也许有失偏颇,因为主流编程语言中似乎只有Python、Rust和Swift不支持自增自减运算符。​当我第一次接触Python时,这也

raptor允许使用连接基本什么来创建算法raptor允许使用连接基本什么来创建算法Jan 15, 2021 pm 06:42 PM

raptor允许使用连接基本流程图符号来创建算法,然后可以在其环境下直接调试和运行算法,包括单步执行或连续执行的模式。Raptor程序实际上是一个流程图,运行时一次执行一个图形符号,以便帮助用户跟踪Raptor程序的指令流执行过程。

深入分析 Golang 与 Ruby 的异同深入分析 Golang 与 Ruby 的异同Jun 01, 2024 pm 08:46 PM

Go与Ruby的主要区别在于:Go是一种静态类型编译语言,支持轻量级并行和高效内存管理,适合编写高并发应用程序;Ruby是一种动态类型解释语言,支持真正的并行但内存管理需手动控制,适合编写灵活的Web应用程序。

Ruby怎么使用Mysql2连接操作MySQLRuby怎么使用Mysql2连接操作MySQLApr 17, 2023 pm 10:07 PM

Ruby操作MySQL使用mysql2连接mysql并操作mysql。geminstallmysql2连接mysql建立连接:require&#39;mysql2&#39;conn=Mysql2::Client.new({host:&#39;192.168.200.73&#39;,username:&#39;root&#39;,password:&#39;P@ssword1!&#39;})接受的连接选项包括:Mysql2::Clie

分布式系统必须知道的一个共识算法:Raft分布式系统必须知道的一个共识算法:RaftApr 07, 2023 pm 05:54 PM

一、Raft 概述​​Raft 算法​​​是分布式系统开发首选的​​共识算法​​。比如现在流行 Etcd、Consul。如果​​掌握​​​了这个算法,就可以较容易地处理绝大部分场景的​​容错​​​和​​一致性​​需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。二、Raft 角色2.1 角色跟随者(Follower):​​普通群众​​,默默接收和来自领导者的消息,当领导者心跳信息超时的

如何使用MySQL和Ruby实现一个简单的数据分析报表功能如何使用MySQL和Ruby实现一个简单的数据分析报表功能Sep 20, 2023 pm 05:09 PM

如何使用MySQL和Ruby实现一个简单的数据分析报表功能引言:在当今数据驱动的时代,数据分析对于企业的决策和发展起到了至关重要的作用。而数据分析报表作为数据分析的重要组成部分,对于对数据进行整理、可视化和解读具有重要意义。本文将介绍如何使用MySQL和Ruby来实现一个简单的数据分析报表功能,并提供相应的代码示例。一、数据库设计与建表要实现数据分析报表功能

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器