OpenCV detectin skin colour invariant with illumination changes
In my experience best method for this is converting it to Lab color space.
L represents the light, and a and b are light independent.
OpenCV supports Lab color scale conversion.