In diesem CodeWie bekomme ich HSV-Werte eines durchschnittlichen Pixels eines Bildes?
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]
die letzte Zeile wirft
/ruby-vips-1.0.3/lib/vips/argument.rb:154:in `set_property': invalid argument Array (expect #<Class:0x007fbd7c923600>) (ArgumentError)`
PS: temporäre nahm und die ChunkyPNG Umsetzung Refactoring:
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
Kühl. Sie können es wahrscheinlich als 'im.bandsplit.map (&: avg)' – Nakilon
schreiben Ich werde Ergebnisse von mir und heute oder morgen vergleichen. – Nakilon
Oh, guter Punkt auf der Karte (&: avg) '. Es ist unwahrscheinlich, dass genau dasselbe Ergebnis erzielt wird. – user894763