Ruby-vips图像处理库。 有没有好用的例子?

我是图像处理的新手。 我对JPEG内部及其工作原理一无所知。

我想知道,如果我能找到一些执行以下简单操作的ruby代码:

  1. 打开jpeg文件。
  2. 遍历每个像素并将其颜色设置为fx绿色。
  3. 将结果写入另一个文件。

我对使用ruby-vips库如何实现这一点特别感兴趣
https://github.com/ender672/ruby-vips

我的目标 – 学习如何使用ruby-vips(伽马校正,亮度,色调……)执行基本的图像处理操作

任何链接到比’hello world’更复杂的工作示例 – 就像在ruby-vips的github页面上一样,将非常感谢!

如果有ruby-vips的替代品,我也会感谢他们。


UPDATE

自从我问这个问题以来发生了很多事情:

  • ruby-vips是一颗gem: http ://libvips.blogspot.co.uk/2012/06/ruby-vips-launches.html
  • 完全重写vips8,现在基于ruby-ffi
  • 源代码存储库在这里: https : //github.com/jcupitt/ruby-vips/
  • 用法示例: https : //github.com/jcupitt/ruby-vips/wiki/Examples
  • vips图像处理的基本概念: https : //github.com/jcupitt/ruby-vips/wiki/Basic-concepts
  • ruby-vips集成到Ruby on Rails的CarrierWave上传器插件: https : //github.com/eltiare/carrierwave-vips
  • ruby-vips是rails6中ActiveStorage的官方后端之一

自写这个答案以来, 更新 ruby-vips已经改变了一点。 我已经修改了当前(2018)版本。

我是libvips的维护者之一,这是ruby-vips包装的图像处理库。

Tim的ruby-vips存储库暂时没有被触及。 我在这里有一个与当前libvips一起使用的fork:

https://github.com/jcupitt/ruby-vips

这里有一些例子:

https://github.com/jcupitt/ruby-vips/tree/master/example

要将红色和蓝色通道设置为零并保留绿色图像,可以将R和B乘以零,将G乘以1. ruby​​-vips使用数组表示像素常量,因此您只需编写:

out = in * [0, 1, 0] 

完整的可运行示例可能是:

 #!/usr/bin/ruby require 'vips' im = Vips::Image.new_from_file '/home/john/pics/theo.jpg' im *= [0, 1, 0] im.write_to_file 'x.jpg' 

你可以使用new_from_file的一个技巧:如果你知道你只是对图像进行简单的从上到下操作,比如算术或过滤或resize,你可以告诉ruby-vips你只需要顺序访问像素:

 im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential 

现在ruby-vips将流式传输您的图像。 它将并行运行加载,乘法和保存,并且在任何时候都不会在内存中保留多个像素扫描线。 这可以为速度和内存使用提供非常好的改进。

要更改图像伽玛,您可以尝试以下方法:

 im = im ** 0.5 * 255 / 255 ** 0.5 

虽然这会有点慢(它会为每个像素调用pow()三次),但制作查找表,运行pow(),然后通过表映射图像要快得多:

 lut = Vips::Image.identity lut = lut ** 0.5 * 255 /255 ** 0.5 im = im.maplut lut 

如有任何问题,请随时在rubyvips问题跟踪器上打开它们:

https://github.com/jcupitt/ruby-vips/issues

对不起,我不知道ruby-vips,但ImageMagick在图像处理方面是经典的。 有RMagick ( 当前repo )forms的Ruby绑定,你可以从ImageMagick文档中获得很多function,但是这里还有三个教程,以及网上的很多例子。

如果你真的想深入了解图像处理理论,它的根源是信号处理的一种forms(这是非常令人兴奋和有益的,因为它通常允许你在图像音频/video信号上应用非常相似的算法,但它最终将在数学上变得非常沉重 – 傅立叶变换),那么,如果数学不会吓到你,我只能推荐Gonzalez和Woods阅读这本书 ,我想说这是该领域的明确参考。 这是昂贵的,但你需要的就是让你开始并远远超越。 这里还有一个页面,其中包含免费电子书的链接,如果您想在不花费大量金钱的情况下开始使用。