Materi
Citra RGB menyimpan tiga kanal: merah, hijau, dan biru. Citra abu-abu (grayscale) hanya menyimpan satu kanal kecerahan. Dokumentasi Image.convert di Pillow menyebut rumus yang dipakainya saat mengubah citra ke mode "L": transformasi luma ITU-R 601-2, L = R × 299/1000 + G × 587/1000 + B × 114/1000. Bobot hijau paling besar dan biru paling kecil, sehingga hijau murni (0, 255, 0) jauh lebih terang daripada biru murni (0, 0, 255), walau keduanya bernilai 255 di satu kanal. Hasilnya dibulatkan ke bilangan bulat karena mode "L" menyimpan uint8.
Pustaka lain boleh memakai bobot lain. skimage.color.rgb2gray memakai 0,2125; 0,7154; 0,0721, sehingga dua pustaka bisa memberi angka abu-abu berbeda untuk piksel yang sama. Keduanya benar menurut rumusnya masing-masing; yang salah adalah membandingkan hasil dari dua rumus yang berbeda.
HSV (hue, saturation, value) memisahkan rona warna dari kecerahan. Contoh "RGB to HSV" di galeri scikit-image menjelaskan bahwa di RGB rona dan kecerahan tersebar sebagai kombinasi ketiga kanal, sedangkan di HSV masing-masing menempati satu kanal, sehingga memisahkan objek berdasarkan warnanya cukup dengan ambang pada satu kanal. Modul colorsys bawaan Python mengubah satu warna ber-skala 0–1 ke HSV.
import colorsys
import numpy as np
oranye = np.array([240, 140, 20], dtype=np.uint8)
bobot = np.array([0.299, 0.587, 0.114])
print(round(float(oranye.astype(float) @ bobot), 2)) # 156.22
print(colorsys.rgb_to_hsv(240 / 255, 140 / 255, 20 / 255)) # rona, saturasi, value