rmagick颜色超出范围

时间:2017-05-02 13:50:04

标签: ruby image rmagick

我想尝试平均图像中的颜色,我想出了以下脚本(来自here):

scrip.rb:

require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red, color.green, color.blue] 

img.jpg:
enter image description here

但RGB输出为[31829, 30571, 27931]

问题:

  1. 这些数字不应该在[0-255]
  2. 的范围内
  3. 我做错了什么?

2 个答案:

答案 0 :(得分:0)

奇数输出的原因是由于位深度。正如之前的回答所述,“它们存储在16位的'量子深度'中。”这是一个初步假设,但通过查看以前的答案,这更有意义。为了将这些数字正确地转换回典型的[0-255]范围,您必须将值除以256.

注意:您可以在运行时更改量子深度。在读取文件时,您应该能够使用如下代码中所示的块。

img = Magick::Image.read(file){self.depth = 8}.first

答案 1 :(得分:0)

您所拥有的是红色,绿色和蓝色直方图值。

您需要除以256才能获得每个RGB值。在这种情况下,RGB值为:

require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red/256, color.green/256, color.blue/256]
  # => [124, 119, 109]

This blog post提供了有关如何使用RMagick分析图像的更全面的解释。