Да, вам, вероятно, следует реализовать какой-то шейдер для этого, поскольку это очень распараллеливаемая операция.Тем не менее, YUV - это просто формат канала изображения, очень похожий на RGB, за исключением следующего отношения:
- Y = avg (R, G, B)
- U = R
- V = B
Одна из интересных вещей (и вероятное объяснение того, почему разделение Y и UV является вашим требованием) состоит в том, что только Y,у вас есть черно-белое изображение.С помощью UV можно довольно легко определить не только G, но и градиент цветового канала для конвейеров обработки изображений.
Иногда кодирование выполняется дополнительно, но обычно сводится к нормализации.Ваш видеопоток, вероятно, имеет более специфическую кодировку, которая также включает некоторое сжатие.Тем не менее, разделение каналов должно быть простым:
- [1 0 0] * [YUV] ^ T = Y
- [[0 1 0], [0 0 1]] * [YUV] ^ T = [UV] ^ T
Шейдеры (действительно обработка на GPU) творит чудеса с линейной алгеброй, и, поскольку разделение можно выразить в виде линейных преобразований, я бы сказал, чтомаршрут.