我是靠谱客的博主 粗心世界,这篇文章主要介绍opecv BGR转NV21opecv BGR转NV21,现在分享给大家,希望可以做个参考。

opecv BGR转NV21

在opencv中,并没有直接转NY21的方法,所以需要先转到YUV_I420再转成NV21。

  • YUV_I420格式:Y之后是所有的U分量,再接所有的V分量。
  • NV21格式:Y之后VU分量交替。

因此Y数据完整复制,V和U数据隔一个字节取一个,代码如下:

void BGR2YUV_NV21(const Mat &src, Mat &dst)
{
	// 先转BGR到YUV_I420
	cvtColor(src, dst, CV_BGR2YUV_I420);
    // 再从YUV_I420手动转为NV12/NV21
    int offset = w * h;  // Y的长度
    int len = w * h / 2; 
    int halflen = len / 2; //U和V的长度
    unsigned char tmp[len]; //tmp保存原始UV的数据
    unsigned char *data = dst.data;
    memcpy_s(tmp, len, data + offset, len);
    for (int i = 0; i < halflen; ++i) {
         data[offset + i * 2] = tmp[halflen + i];  // V
         data[offset + i * 2 + 1] = tmp[i];        // U
     }
}

最后

以上就是粗心世界最近收集整理的关于opecv BGR转NV21opecv BGR转NV21的全部内容,更多相关opecv内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(115)

评论列表共有 0 条评论

立即
投稿
返回
顶部