В этом кодеКак получить значения HSV для среднего пикселя изображения?
im = Vips::Image.new_from_file "some.jpg"
r = (im * [1,0,0]).avg
g = (im * [0,1,0]).avg
b = (im * [0,0,1]).avg
p [r,g,b] # => [57.1024, 53.818933333333334, 51.9258]
p Vips::Image.sRGB2HSV [r,g,b]
последняя линия бросает
/ruby-vips-1.0.3/lib/vips/argument.rb:154:in `set_property': invalid argument Array (expect #<Class:0x007fbd7c923600>) (ArgumentError)`
PS: временно взял и переработан реализацию ChunkyPNG:
def to_hsv r, g, b
r, g, b = [r, g, b].map{ |component| component.fdiv 255 }
min, max = [r, g, b].minmax
chroma = max - min
[
60.0 * (chroma.zero? ? 0 : case max
when r ; (g - b)/chroma
when g ; (b - r)/chroma + 2
when b ; (r - g)/chroma + 4
else 0
end % 6),
chroma/max,
max,
]
end
Прохладный. Вероятно, вы можете написать его как 'im.bandsplit.map (&: avg)' – Nakilon
Я сравню результаты этого и моего сегодня или завтра. – Nakilon
О, хорошая точка на карте (&: avg) '. Это вряд ли даст точно такой же результат. – user894763