Посмотрев документацию по преобразованию цветов OpenCV и Matlab.Я нашел следующее.По моим наблюдениям, есть существенная разница в алгоритме и реализации.
В Matlab функция rgb2ycbcr () преобразует цвет в цифровую формулу, которая имеет вид
Y = 16+ (65.481 * R + 128.553 * G + 24.966 * B)
Cb = 128+ (-37.797 * R - 74.203 * G + 112.0 * B)
Cr = 128+ (112.0 * R - 93.786 * G - 18.214 * B)
Если входное значение равно uint8, то YCBCR равно uint8, где Y находится в диапазоне [16 235], а Cb и Cr находятся в диапазоне [16 240].
Но в OpenCV преобразование выполняется в аналоговой формуле:
Y = 0.299 * R+ 0.587 * G+ 0.114 * B
Cb = -0.168736 * R - 0.331264 * G + 0.5 * B
Cr = 0.5 * R - 0.418688 * G - 0.081312 * B
Если входное значение равно uint8,тогда YCBCR равен uint8, где Y и Cb и Cr находятся в диапазоне [0 255].Это причина, почему вы получаете другой результат.