2013-03-15 14 views
6

RGB renk değerlerini HLS'ye dönüştürmek için python'un colorsys kitaplığını kullanıyorum. Doğrulamak için tekrar RGB'ye dönmeyi denedim ve farklı bir değer elde ettim. Hassas konular nedeniyle küçük farklılıkları anlayabiliyorum, ancak bu değerler önemli ölçüde farklı. İşte RGB'yi HLS'ye dönüştürme ve geri

benim kod:

import colorsys 
r=192 
g=64 
b=1 

hlsval = colorsys.rgb_to_hls(r,g,b) 
rgbval=colorsys.hls_to_rgb(hlsval[0],hlsval[1],hlsval[2]) 

print hlsval, rgbval 

Çıktı:

(0.16666666666666666, 96.5, -1.0) (191.99999999999994, 192.0, 1.0) 

yeşil değeri 200 Ben başka değerler denedik

% ve her zaman kapalıdır bileşenlerinden biridir önemli bir miktardır. Bir şey mi eksik?

+1

değerleri ? –

+2

@AshwiniChaudhary: 'a, b, c = r, g, b' gibi bir yere eşdeğer olduğu oldukça açıktı (ya da sadece onun yerine r, g, b 'yi kullanmak için kodunu değiştirmeyi unutmadı) "a, b, c" veya bir şey), çünkü bunlar a, b, c = 192, 64, 1 ile aldığınız değerlerdir. – abarnert

+0

Evet, bunun için üzgünüm. Şimdi düzeltdim. – user2175594

cevap

15

Kişisel değerler yolu ColorSpace sınırları dışında, bir yoludur. the docs itibaren

:

Koordinatları bu renk alanlarının tümünde nokta değerleri dalgalanmaktadır. YIQ alanında Y koordinatı 0 ile 1 arasındadır, ancak I ve Q koordinatları pozitif veya negatif olabilir. Tüm diğer alanlarda, koordinatların hepsi 0 ile 1 arasındadır.

Sanırım 0 ile 255 arasında bayt değerleri olmalarını bekliyorsunuz? Sadece ilk 255 bölün:

r, g, b = 192, 64, 1 
r, g, b = [x/255.0 for x in r, g, b] 
h, l, s = colorsys.rgb_to_hls(r, g, b) 
r, g, b = colorsys.hls_to_rgb(h, l, s) 
r, g, b = [x*255.0 for x in r, g, b] 
print r, g, b 

Bu size verecektir:

192.0 64.0 1.0 

Eğer böyle saçma hatalar olsun neden ColorSpace sınırları dışında bir yol gidince anlamak istiyorsak.

Öncelikle, ColorSpace dışında değerler anlamsız olduğunu anlamaya dokümanlardan bağlı iki belgelerini okuyun ve neden imkansız kısıtlamalara değerlerini üretmek için soruyorsun. Ardından, başka bir yol yerine neden başarısız olduğunu tam olarak anlayabilmek için, hangi algoritmayı kullandığını bilmeniz gerekir - bu oldukça kolaydır, çünkü dokümanlar kaynak koduna bağlanır, bu da Python ve oldukça okunabilir .

(PS, ben 9650% hafiflik nasıl görünebileceğini hayal edebiliyorum ama -100% doygunluk merak ediyorum. Muhtemelen Lovecraftian şey.) A`, `b` ve` C` `arasında

İlgili konular