概述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复