我是靠谱客的博主 粗心世界,最近开发中收集的这篇文章主要介绍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 BGR转NV21opecv BGR转NV21所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部