最後の行はイメージの平均ピクセルのHSV値を取得するにはどうすればよいですか?
/ruby-vips-1.0.3/lib/vips/argument.rb:154:in `set_property': invalid argument Array (expect #<Class:0x007fbd7c923600>) (ArgumentError)`
PSスロー
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]
このコードで:一時は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
Cool。あなたはおそらくそれを 'im.bandsplit.map(&:avg)'と書くことができます。 – Nakilon
これと私との結果を今日または明日比較します。 – Nakilon
ああ、 'map(&:avg)'の良い点。まったく同じ結果をもたらす可能性は低いです。 – user894763