美文网首页FFmpeg与音视频流媒体工程开发相关
[流媒体]我眼中的YUV & YUV图像分割

[流媒体]我眼中的YUV & YUV图像分割

作者: _小老虎_ | 来源:发表于2018-12-27 23:55 被阅读0次

    • Part 1

    YUV格式图片如下

    也就是每4个像素,对应一个U和一个V


    YUVDesc.png

    同时目前媒体中,YUV主要为Y,ChromaB,ChromaR形式。

    关于YUV拆分过程图如下

    Y'为亮度,Cb、Cr分量代表当前颜色对蓝色和红色的偏移程度。下图分别是Y+U+V/Y/Cb/Cr

    440px-Barns_grand_tetons_YCbCr_separation.jpg
    • Part 2

    关于YUV显示和分割

    显示

                        for (i = 0; i<height; i++) {
                            memcpy(snode->luma + width*i, v_frame->data[0] + i * v_frame->linesize[0], width);
                        }
                        for (i = 0; i<height / 2; i++) {
                            memcpy(snode->chromaB + width/2*i, v_frame->data[1] + i * v_frame->linesize[1], width / 2);
                        }
                        for (i = 0; i<height / 2; i++) {
                            memcpy(snode->chromaR + width/2*i, v_frame->data[2] + i * v_frame->linesize[2], width / 2);
                        }
    

    分割

    左上1/4
                        for (i = 0; i<height / 2; i++) {
                            memcpy(snode->luma + width*i, v_frame->data[0] + i * v_frame->linesize[0], width / 2);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaB + width/2*i, v_frame->data[1] + i * v_frame->linesize[1], width / 4);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaR + width/2*i, v_frame->data[2] + i * v_frame->linesize[2], width / 4);
                        }
    
    上半部分和下半部分
                      /*
                       * 上半部分
                       */
                        for (i = 0; i<height / 2; i++) {
                            memcpy(snode->luma + width*i, v_frame->data[0] + i * v_frame->linesize[0], width);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaB + width/2*i, v_frame->data[1] + i * v_frame->linesize[1], width / 2);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaR + width/2*i, v_frame->data[2] + i * v_frame->linesize[2], width / 2);
                        }
                        
                        /*
                         * 下半部分
                         */
                        for (i = 0; i<height / 2; i++) {
                            memcpy(snode->luma + width*i, v_frame->data[0] + (i + height/2) * v_frame->linesize[0], width);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaB + width/2*i, v_frame->data[1] + (i+ height / 4) * v_frame->linesize[1], width / 2);
                        }
                        for (i = 0; i<height / 4; i++) {
                            memcpy(snode->chromaR + width/2*i, v_frame->data[2] + (i+ height / 4) * v_frame->linesize[2] + height / 4, width / 2);
                        }
    


    引用,这一块比较好的文章:
    https://www.jianshu.com/p/a91502c00fb0
    https://blog.csdn.net/occupy8/article/details/49153731

    相关文章

      网友评论

        本文标题:[流媒体]我眼中的YUV & YUV图像分割

        本文链接:https://www.haomeiwen.com/subject/hkejlqtx.html