OpenCV一些常用工具

前言

在使用音视频处理芯片时,比较多的芯片支持硬件编解码以及格式转换等,减少了系统资源的耗损(CPU,GPU等)。在部分芯片中硬件编解码或转换需要自行按照demo封装,测试等可使用OpenCV前期先做测试处理,在使用过程中,遇到一些问题,在此做下记录以备后续之需。


准备工作

1)OpenCV中大量使用了二维数组,因此需要弄清楚宽高, 分辨率常使用宽x高表示, OpenCV中经常使用高x宽表示,对应的是rows和cols,即:
1920(width)x1080(height) -> 1920(cols)*1080(rows)
OpenCV封装基本都是列(rows)在前, 行(cols)在后。

2)因为yuv涉及到1.5小数,因此必须保证宽高是偶数,部分芯片还要求16位对齐,因此需要考虑这点,如无需考虑对齐问题, 可将w和h都减少1个像素即可(保证不会越界)。针对对齐,可以参考海思的上对齐和下对齐(后续补充,如有需要参考的同学留言, 我及时附上)。

3)常用的原始数据打开工具,支持各种YUV和BGR原始数据查看链接: 原始数据查看工具

封装为cv::Mat格式

1)使用OpenCV,首先需要将数据封装成cv::Mat格式,YUV420SP或YUV420P封装如下:

typedef struct rawInfo{
	unsigned int width;
	unsigned int height;
	unsigned char *pData;
}
假定该pData已分配了堆栈
cv::Mat yuvMat(height*3/2, width, CV8UC1, pData);

这里要非常注意height在前,width在后,

格式转换

OpenCV中非常多的接口工具输入输出都是基于cv::Mat的,比较推BGR24,
比如使用编码等。
1)将YUV转为BGR24,转换按照如下:

cv::cvtColor(yuvMat, bgrMat, cv::COLOR_YUV420sp2BGR);
其中yuvMat为转换前数据, bgrMat为转化后的数据,本例是将yuv420sp转为BGR24,如果有其他需求,请使用如下宏对应选择。
enum ColorConversionCodes {
    COLOR_BGR2BGRA     = 0, //!< add alpha channel to RGB or BGR image
    COLOR_RGB2RGBA     = COLOR_BGR2BGRA,

    COLOR_BGRA2BGR     = 1, //!< remove alpha channel from RGB or BGR image
    COLOR_RGBA2RGB     = COLOR_BGRA2BGR,

    COLOR_BGR2RGBA     = 2, //!< convert between RGB and BGR color spaces (with or without alpha channel)
    COLOR_RGB2BGRA     = COLOR_BGR2RGBA,

    COLOR_RGBA2BGR     = 3,
    COLOR_BGRA2RGB     = COLOR_RGBA2BGR,

    COLOR_BGR2RGB      = 4,
    COLOR_RGB2BGR      = COLOR_BGR2RGB,

    COLOR_BGRA2RGBA    = 5,
    COLOR_RGBA2BGRA    = COLOR_BGRA2RGBA,

    COLOR_BGR2GRAY     = 6, //!< convert between RGB/BGR and grayscale, @ref color_convert_rgb_gray "color conversions"
    COLOR_RGB2GRAY     = 7,
    COLOR_GRAY2BGR     = 8,
    COLOR_GRAY2RGB     = COLOR_GRAY2BGR,
    COLOR_GRAY2BGRA    = 9,
    COLOR_GRAY2RGBA    = COLOR_GRAY2BGRA,
    COLOR_BGRA2GRAY    = 10,
    COLOR_RGBA2GRAY    = 11,

    COLOR_BGR2BGR565   = 12, //!< convert between RGB/BGR and BGR565 (16-bit images)
    COLOR_RGB2BGR565   = 13,
    COLOR_BGR5652BGR   = 14,
    COLOR_BGR5652RGB   = 15,
    COLOR_BGRA2BGR565  = 16,
    COLOR_RGBA2BGR565  = 17,
    COLOR_BGR5652BGRA  = 18,
    COLOR_BGR5652RGBA  = 19,

    COLOR_GRAY2BGR565  = 20, //!< convert between grayscale to BGR
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值