RGB'den HSV'ye dönüşümün RGB değerlerini 0-255 alması ve HSV değerlerine dönüştürmesi gerektiğini anlıyorum [0-360, 0-1, 0-1]. Örneğin, bkz. Bu converter in java:matplotlib renkler rgb_to_hsv doğru çalışmıyor. Belki rapor etmelisin?
Matplotlib.colors.rbg_to_hsv dosyasını bir görüntü üzerinde çalıştırdığımda, çıktı değerleri [0-1, 0-1, 0-360] gibi görünüyor. Ancak, bu işlevi bir image like this'da kullandım ve doğru sırada [H, S, V] çalışıyor gibi görünüyor, sadece V çok büyük.
Örnek:
In [1]: import matplotlib.pyplot as plt
In [2]: import matplotlib.colors as colors
In [3]: image = plt.imread("/path/to/rgb/jpg/image")
In [4]: print image
[[[126 91 111]
[123 85 106]
[123 85 106]
...,
In [5]: print colors.rgb_to_hsv(image)
[[[ 0 0 126]
[ 0 0 123]
[ 0 0 123]
...,
olanlar bazı sayı Burada 0 ile 1 arasında
konum 0sn değildir matplotlib.colors.rgb_to_hsv
def rgb_to_hsv(arr):
"""
convert rgb values in a numpy array to hsv values
input and output arrays should have shape (M,N,3)
"""
out = np.zeros(arr.shape, dtype=np.float)
arr_max = arr.max(-1)
ipos = arr_max > 0
delta = arr.ptp(-1)
s = np.zeros_like(delta)
s[ipos] = delta[ipos]/arr_max[ipos]
ipos = delta > 0
# red is max
idx = (arr[:, :, 0] == arr_max) & ipos
out[idx, 0] = (arr[idx, 1] - arr[idx, 2])/delta[idx]
# green is max
idx = (arr[:, :, 1] == arr_max) & ipos
out[idx, 0] = 2. + (arr[idx, 2] - arr[idx, 0])/delta[idx]
# blue is max
idx = (arr[:, :, 2] == arr_max) & ipos
out[idx, 0] = 4. + (arr[idx, 0] - arr[idx, 1])/delta[idx]
out[:, :, 0] = (out[:, :, 0]/6.0) % 1.0
out[:, :, 1] = s
out[:, :, 2] = arr_max
return out
ben den tanımıdır renkler gibi diğer rgb_to_hsv dönüşümlerinden birini kullanır, ancak bu bulduğum tek vektörlü python. Bunu anlayabilir miyiz? Onu github üzerine rapor etmemiz gerekiyor mu?
Matplotlib 1.2.0, numpy 1.6.1, Python 2.7, Mac OS X 10.8
Teşekkürler Jaime, bunu çözmüş olabilir. H'nin 0-360 yerine neden 0-1 arasında bir değer gösterdiğini biliyor musunuz? – chimpsarehungry
Bir renk uzayının her bir bileşenini '0-1'e normalleştirme, yasal olarak benimsenebilecek makul bir sözleşmedir. Matplotlib bunu RGB renk alanı ile yaptığından, HSV renk uzayında bunu yapmak tutarlılık kazanır. –
Görüntü, 255'e kadar bölümün çalışması için dtype 'float' olmalıdır. – facuq