Спасибо всем откликнувшимся. Решил остановиться на совете
Iska (особое спасибо за наглядность

). Перевожу RGB в Lab, и сравниваю параметр L c 50, если меньше считаю цвет темным (подписываю белым), иначе светлым (подписываю черным). Тему считаю решенной.