美文网首页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