Sta*_*ich 5 ruby image-processing vips
我对图像处理完全陌生.我对JPEG内部及其工作原理一无所知.
我想知道,如果我能找到一些执行以下简单操作的ruby代码:
我特别感兴趣的是如何使用ruby-vips库来实现这一点
https://github.com/ender672/ruby-vips
我的目标 - 学习如何使用ruby-vips执行基本图像处理操作(伽马校正,亮度,色调......)
任何链接到比'hello world'更复杂的工作示例 - 就像在ruby-vips的github页面上一样,将非常感谢!
如果有ruby-vips的替代品,我也会感谢他们.
UPDATE
自从我问这个问题以来发生了很多事情:
自写这个答案以来,更新 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]
Run Code Online (Sandbox Code Playgroud)
完整的可运行示例可能是:
#!/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'
Run Code Online (Sandbox Code Playgroud)
你可以使用一个技巧new_from_file:如果你知道你只是在图像上做简单的从上到下的操作,比如算术或过滤或调整大小,你可以告诉ruby-vips你只需要顺序访问像素:
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential
Run Code Online (Sandbox Code Playgroud)
现在ruby-vips将流式传输您的图像.它将并行地运行加载,乘法和保存,并且在任何时候都不会在内存中保留多个像素扫描线.这可以为速度和内存使用提供非常好的改进.
要更改图像伽玛,您可以尝试以下方法:
im = im ** 0.5 * 255 / 255 ** 0.5
Run Code Online (Sandbox Code Playgroud)
虽然这有点慢(它会为每个像素调用pow()三次),但制作查找表,运行pow(),然后通过表映射图像要快得多:
lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut
Run Code Online (Sandbox Code Playgroud)
如有任何问题,请随时在rubyvips问题跟踪器上打开它们:
https://github.com/jcupitt/ruby-vips/issues
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |