Как сжать изображение YUYV в JPEG
(Крест размещен в списке пользователей libjpeg.)
У меня проблема с libjpeg-turbo.
Для функции tjCompress2 требуется сжатие изображения RGB или Greyscale.
http://libjpeg-turbo.sourceforge.net/ljtdoc.branches_1.3.x/turbojpeg-c/group___turbo_j_p_e_g.html#gaba62b7a98f960839b588579898495cf2
(Извините, вам придется вставить эту ссылку, поскольку она нарушает уценку.)
Моя веб-камера (PS3 EyeToy) имеет следующие характеристики:
chris@raspberrypi ~ $ v4l2-ctl --get-fmt-video
Format Video Capture:
Width/Height : 320/240
Pixel Format : 'YUYV'
Field : None
Bytes per Line: 640
Size Image : 153600
Colorspace : SRGB
Из http://en.wikipedia.org/wiki/JPEG видно, что YUYV эквивалентен YCbCr, который необходим JPEG (хотя он имеет половину данных Cb и Cr по сравнению с яркостью). Я правильно понял?
Я знаю, как превратить YUYV в RGB, используя матрицу, но кажется, что это пустая трата недостаточных циклов ЦП и точности цветопередачи, чтобы выполнить два изменения цветового пространства, когда ни один не нужен.
Есть ли функция, которая может напрямую сжимать изображение YUYV в JPEG?
1 ответ
Со времени, когда был задан вопрос, tjCompressFromYUV
функция была реализована в TurboJPEG API. Это берет изображение в YCbCr
или же YUV
отформатировать и преобразовать его в изображение JPEG.
Тем не менее, чтобы сжать YUYV
изображение с использованием TurboJPEG API, вам все равно нужно преобразовать YUYV
в Y-Cb-Cr
пиксельный формат.
Там также может быть небольшой шанс использовать YUYV
изображение как YUV
изображение с подвыборкой 4:2:2
, так как это приведет к двум Y
компоненты в UV
компоненты, но если этот источник является точным, есть четыре различных способа размещения YUVY
компоненты. Но чтобы быть уверенным, есть шанс 1/4 для этого работать.
В противном случае вы также можете преобразовать изображение с помощью PNGU или чего-то подобного, прежде чем преобразовать его в JPEG, поскольку эта библиотека способна "сохранять изображения YCbYCr в формате png RGB8".