преобразование из rgb в yuv 4: 2: 0 - PullRequest
1 голос
/ 08 июля 2010

как сделать так, чтобы растровое изображение размером 160 * 70 перемещалось по растровому изображению 640 * 280 и отражалось от его края после преобразования обоих растровых изображений в формат yuv 4: 4: 4 и записывалось в один файл yuv?и как я могу конвертировать то же самое в yuv 4: 2: 0? не могли бы вы помочь мне, как я могу кодировать то же самое в c?

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Преобразование в YUV 4: 4: 4 - Это чисто аффинное преобразование для каждого вектора RGB. Просто используйте правильную формулу для любого варианта YUV, который вам нужен. Вы, вероятно, также захотите разделить изображение на плоскости.

Преобразование в YUV 4: 2: 0 - это чисто проблема передискретизации. Вам нужно пересчитать плоскости U и V на половину ширины и половину высоты. НЕ просто пропустить выборки («выборка ближайшего соседа»); это приведет к очень уродливому алиасингу. Вы можете просто усреднить соответствующие квадраты 2х2 или использовать более продвинутый фильтр. В случае понижающей выборки, средняя площадь в любом случае довольно близка к идеальной; Гауссовский может дать слегка лучшие результаты.

Если вы не возражаете против использования библиотечного кода, libswscale из ffmpeg может выполнить оба эти шага за вас и сделает это очень быстро.

Наконец, перемещая маленькое изображение по большому: это чисто прямоугольное изображение или альфа-канал? В любом случае вам просто нужно зациклить координаты, в которых вы хотите, чтобы они появлялись, и вывести изображение для каждой точки. Если он прямоугольный, вы просто копируете пиксели, а если у него есть альфа-канал, вам нужно использовать его для альфа-смешения (интерполяция между значениями пикселей в соответствии со значением альфа).

1 голос
/ 08 июля 2010

Эта статья в Википедии имеет RGB -> YUV440.

alt text

А RGB -> YUV420 описан в той же статье в этом разделе .

Я не понял:

как сделать растровое изображение размером 160 * 70 переместить растровое изображение 640 * 280 и отражаться от его края

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...