利用 OpenCV 转换图片颜色格式

首先说一下遇到的需求,想要做个展示camera的demo,输出的图像有 YUV 格式的 和 16位深度图。显示画面用opengl渲染到glSurfaceView上,得先把图像都转换成 RGB 格式,然后才能作为贴图渲染。

这种处理用 OpenCV 就能轻易实现了,对刚接触的人来说,只是要注意颜色格式等等的设置。

下面是把 yuv 转换成 rgb 的步骤:

cv::Mat rawMat = cv::Mat((height + (height >> 1)), width, CV_8UC1, rgbRawData);
cv::Mat rgbMat = cv::Mat(height,width,CV_8UC3);
cv::cvtColor(rawMat, rgbMat, CV_YUV2RGB_NV12);

这里 CV_8UC1, CV_8UC3 是指定颜色存储格式。

CV_8UC1 表示颜色通道是1,每个颜色用8位数据,高度指定为1.5倍,是因为 yuv420 格式有 H*W 个Y数据,另外还有一半存UV数据。

CV_8UC3 更好理解些,每个像素有3通道,分别是R,G,B,每个颜色用8位数据表示,宽高也就是图像真实的宽高。

最后执行颜色转换的时候,这里对应指定了 CV_YUV2RGB_NV12,其他格式还有很多。

处理深度图像的步骤:

dptMat = cv::Mat(depthH, depthW, CV_16UC1, depthRawData);
dptMat.convertTo(dptMat, CV_8U, 255.0 / 3840);
cv::applyColorMap(dptMat, dptMat, cv::COLORMAP_RAINBOW);

首先构建原始的cvMat,因为是16位单通道的,对应指定格式为 CV_16UC1。

因为16位数据无法进行颜色映射,先转为普通的8位数据,使用的函数是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值