는이미지의 평균 픽셀의 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