2016-03-20 2 views
2

Я обрабатываю кадры предварительного просмотра Android2, которые закодированы в YUV_420 _888, вызывая метод I420ToARGB из библиотеки Libyuv, но я получаю изображения в неправильных цветах.Преобразование YUV_420 _888 в ARGB с использованием Libyuv

libyuv::I420ToARGB(
    ysrc, //const uint8* src_y, 
    ystride, //int src_stride_y, 
    usrc, //const uint8* src_u, 
    ustride, ///int src_stride_u, 
    vsrc, //const uint8* src_v, 
    vstride, //int src_stride_v, 
    argb, //uint8* dst_argb, 
    w*4, //int dst_stride_argb, 
    w, //int width, 
    h //int height 
); 

ответ

1

Если красные объекты кажутся синими, и наоборот, у вас будут плоскости цвета U и V назад. За документацией Android разработчика, самолеты являются:

http://developer.android.com/reference/android/graphics/ImageFormat.html#YUV_420_888

Порядок плоскостей в массиве, возвращенное изображение # getPlanes() является гарантировано таким образом, что плоскость # 0 всегда Y, плоскость # 1 всегда U (Cb), , а плоскость №2 всегда V (Cr).

Кроме того, кажется, что этот метод libyuv не поддерживает шаг пикселя, который может быть больше 1 для изображений YUY_420_888. В этом случае вам нужно предварительно обработать плоскости, чтобы они были смежными, или использовать метод, который принимает полуплоский 420 из libyuv, если он существует, когда шаг пикселя больше 1.

Смежные вопросы