【问题标题】:Reducing RGB color intensity in Ruby with Rmagick使用 Rmagick 降低 Ruby 中的 RGB 颜色强度
【发布时间】:2016-03-18 19:15:47
【问题描述】:

我正在翻译一个用 MATLAB 制作的函数,该函数使用 Rmagick 将图像扇区的颜色强度降低到 Ruby

for i=round(f/3):f 
        for j=1:round(c)
            for k=1:p
            A(i,j,k) = B(i,j,k) - a;
            end
        end
    end

    for i=1:round(2*f/3)

这会将所有 3 个 RGB 矩阵的颜色强度降低某个值 (a)。尝试用 ruby​​ 代码重现这个结果:

(0..imagen.columns).each do |x|
  ((2 * imagen.rows) / 3..imagen.rows).each do |y|
    imagen.pixel_color(x, y, 'pink')
  end
end

我可以将图像的下三分之一更改为固定颜色,在本例中为粉红色。

尝试使用每种颜色的方法将每个组件减少某个值(atenuacion)是行不通的,它会返回相同的图像。

(0..imagen.columns).each do |x|
  ((2 * imagen.rows) / 3..imagen.rows).each do |y|
    pixel = imagen.pixel_color(x, y)
    pixel.red - atenuacion
    pixel.green - atenuacion
    pixel.blue - atenuacion
    imagen.pixel_color(x, y, pixel)
  end
end

欢迎任何提示或建议,提前谢谢你:D

【问题讨论】:

    标签: ruby image-processing rmagick


    【解决方案1】:

    问题出在这里:

    pixel.red - atenuacion
    pixel.green - atenuacion
    pixel.blue - atenuacion
    

    您没有更改pixel.red 的值等。您只是从pixel.red 的值中减去atenuacion,然后对结果不做任何事情。试试这个:

    pixel.red -= atenuacion
    pixel.green -= atenuacion
    pixel.blue -= atenuacion
    

    在上面,pixel.red -= atenuacionpixel.red = pixel.red - atenuacion 的简写。我只是猜测pixel.red 等人既是二传手也是二传手。如果没有,您可能需要这样做:

    pixel = imagen.pixel_color(x, y)
    
    new_color = Magick::Pixel.new(
                  pixel.red - atenuacion,
                  pixel.green - atenuacion,
                  pixel.blue - atenuacion,
                  pixel.opacity)
    
    imagen.pixel_color(x, y, new_color)
    

    【讨论】:

    • 感谢您的回答。我做了你告诉我的事情,但它目前正在工作,你可以在这里看到:imgur.com/a/8osXN。它会扭曲图像的颜色,而不是只降低它们的强度,正如您在我的 matlab 示例中看到的那样......有什么建议吗?
    • 我对 MATLAB 一无所知,对图像处理也知之甚少,但是您的代码中的这一点看起来与您在 Ruby 中所做的不一样:A(i,j,k) = B(i,j,k) - a;。在我看来,降低像素的颜色强度与从其红色、绿色和蓝色值中减去相同的值不同。例如,如果您的值是 (125, 38, 205) 怎么办?如果atenuaction 是 128,则结果将是 (-3, -90, 77)。我不知道 RMagick 对负值做了什么,但即使它只是将它们限制为零,这也可能不是你所期望的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2015-03-31
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多