Формат NV12 определяет определенный порядок цветовых каналов цветового пространства YUV с субдискретизацией 420.
Формат NV12 в основном используется в конвейере кодирования/декодирования видео.
NV12 — это двухплоскостной формат с полноразмерной плоскостью Y, за которой следует одна плоскость цветности со сплетенными значениями U и V. NV21 такой же, но с переплетенными значениями V и U. 12 в NV12 означает 12 бит на пиксель. NV12 имеет канал цветности половинной ширины и половинной высоты, и, следовательно, имеет субдискретизацию 420.
В контексте NV12 формат YUV в основном упоминается как цветовое пространство YCbCr.
Элементы NV12 8 бит на элемент (тип uint8
).
В контексте поста элементы YUV находятся в стандарте «ограниченного диапазона»: диапазон Y — [16, 235], диапазон U, V — [16, 240].
sRGB (стандартный красный, зеленый, синий) — это стандартное цветовое пространство, используемое компьютерными системами.
В контексте публикации sRGB диапазон компонентов цвета: [0, 255] (тип uint8
).
Порядок элементов RGB не имеет отношения к публикации (предполагается, что 3 цветовых плоскости).
В настоящее время существует как минимум 2 возможных формата YCbCr, использующих NV12:
Пример порядка элементов NV12:YYYYYY
YYYYYY
UVUVUV
Преобразование RGB в NV12 можно описать следующими этапами:
- Преобразование цветового пространства - преобразование из цветового пространства sRGB в YUV.
- Понижение дискретизации цветности - сжимайте каналы U, V в 2 раза по каждой оси (преобразование из YUV444 в YUV420).
- Чередование элементов цветности - расположите элементы U, V как U, V, U, V...
На следующем рисунке показаны этапы преобразования с размером изображения 6x6 пикселей:
Как мы можем преобразовать sRGB в NV12 с помощью NumPy?
Примечание:
Вопрос относится к реализации Python, которая демонстрирует процесс преобразования (сообщение не предназначено для существующей функции, такой как реализация OpenCV).