rmagick 颜色超出范围

rmagick color out of range

我正在尝试平均图像中的颜色,我想出了以下脚本(来自 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:

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

问题:

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

奇数输出的原因是由于位深度。正如之前的答案所述,"They are stored in a 'quantum depth' of 16-bits." 这是一个初始假设,但通过查看之前的答案,这更有意义。为了将这些数字正确转换回您通常需要的 [0-255] 范围,您必须将这些值除以 256。

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

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

你所拥有的是红色、绿色和蓝色 直方图 值。

您需要除以 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.

分析图像提供了更详尽的解释