YUV 转 BGR 实用方法:Opencv

YUV、RGB、BGR用途:

YUV、RGB、BGR还有其他的一些都属于颜色的色彩空间,大家最熟悉的应该就是RGB了,但是Opencv 中的Mat的是BGR的,如果将RBG赋值后会有颜色变蓝等问题,亲测,亲自踩的坑。。单YUV的颜色表示也有很多种,种类我就不这里说了,很多我也没有接触过。这里我们只对YUV420做实例,但是Opencv也对YUV其他编码有做转换算法。后面会提一下。

YUV 我见过的两个场景,一个就是海康和宇视的摄像机的码流,我接触到的都是YUV420的,另一个就是“网易云信SDK实时音视频”(webRTC)取到的码流也是YUV420的,RGB 和 BGR 前面说过一种就是Opencv里面Mat数据格式为BGR,常见的*.png的数据格式为:图片头信息+图片信息(即buffer),其中buffer 的格式就是RGBA的格式

Opencv 则是开源的图像处理中重要的类库了,这里就不解释了。。

YUV420 数据格式

这里引用一个博客地址:https://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html

这里详细解释,我再说一下YUV420的格式大概为:Y分量全部+U分量全部+V分量全部,Y分量全部为w*h,U和V加起来为w*h/2,那么YUV加起来长度应该为w*h*3/2,即w*h*1.5。如果你拿到一个Buffer 想做转化数据格式那一定要准确单独取到Y、U、V,三个分量。

如果你已经取到YUV三个分量,那么Opencv就会帮你做好剩下的事情啦。

Opencv YUV 转 BGR

废话不多说直接上代码

		//码流入口.. do something...
		//y分量
		buffer_vec.insert(buffer_vec.end(), pPictureData->pucData[0], pPictureData->pucData[0]+ data0_size);
		//u分量
		buffer_vec.insert(buffer_vec.end(), pPictureData->pucData[1], pPictureData->pucData[1] + data1_size);
		//v分量
		buffer_vec.insert(buffer_vec.end(), pPictureData->pucData[2], pPictureData->pucData[2] + data2_size);
		//创建一个相同大小单通道Mat
		cv::Mat src(h * 3 / 2, w, CV_8UC1, buffer_vec.data());
		//创建一个3通道的BGR大小为W*H
		cv::Mat dst(h, w, CV_8UC3);
		从YUV420转换到BGR空间
		cv::cvtColor(src, dst, CV_YUV2BGR_IYUV);
		cv::imshow("bgr", dst);
		//因为不止一张,所以我这里设置为1了。
		cv::waitKey(1);

OK END~~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值