Hi3519V101色彩空间转换总结(一)

本文详细介绍了在海思Hi3519V101平台上进行色彩空间转换的过程,包括从YUV420格式保存灰度图像和彩色图像的方法。作者通过实践分享了在转换过程中遇到的坑和解决方案,提供了从YUV420到RGB的低效转换代码,强调了记录和积累代码对于快速开发的重要性。
摘要由CSDN通过智能技术生成

目录

前言

虽然只是做了点海思的应用层开发,但是对于各种颜色格式也有一定的了解。因为海思本身是YUV420sp格式的数据。在开发的过程中,要把YUV420sp的数据转换成rgb数据,当然也是要用到opencv。踩了很多坑,但最终成功的把YUV420sp的数据转换成了rgb数据。
学习!分享!感谢!

保存灰度图像

当从海思中使用HI_MPI_VI_GetFrame获取图像时,获取的是yuv420sp格式的图像。假设Y分量:宽Width,高Height。那么,UV分量就是(Width/2)*(Height/2)*2,所以所占的字节数就是3*Width*Height/2YUV格式参见
图文详解YUV420数据格式

最开始不懂图像格式的时候,使用的3518e保存图像到opencv IplImage结构体中的代码,成功的保存了一张灰度图像。

  • opencv中创建IplImage格式的方法:
    这里需要用到两个函数cvCreateImageHeadercvCreateImage。具体可以参见浅谈cvCreateImageHeader,cvCreateImagecvCreateImageHeader导致内存不足的问题
    其中,需要注意的就是cvCreateImage创建了图像头并且为图像分配了数据。而如果我们有了图像数据,就只需要创建图像头cvCreateImageHeader,但是我们释放的注意要把图像头所占的内存释放掉,同时要把对应的图像数据所占内存释放掉,否则就会造成内存不足。

  • 整理3518e保存图像到opencv IplImage结构体9crk给的代码。
    虽然代码量很少,但是这几句代码也是我切入openCV的起始。毕竟所有的图像处理都是要先获取到图像资源的,虽然现在仍然对图像处理的知识一窍不通。但是也算有图像有了点皮毛的了解,知识只能慢慢学,慢慢实践,否则理解不深刻,过段时间又忘记了!

  • main.cpp

#define WIDTH 1920
#define HEIGHT 1080

int main()
{
   
	char data[WIDTH*HEIGHT];	
	int len;             // Y分量的数据大小

	vi_getFrameInit();
	
	IplImage *img = cvCreateImageHeader(cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1);        // IPL_DEPTH_8U表示8位无符号整数,也就是256色,1表示单通道
	cvSetData(img, data, WIDTH);
	len = vi_getYUV(data);
	cvSaveImage("myImage.jpg", img);
	cvReleaseImageHeader(&img);  // 注意:&
}

int vi_getFrameInit()
{
   
	HI_U32 u32Depth = 8;
	VI_CHN ViChn = 0;
	HI_S32 s32ret;
	
	s32ret = HI_MPI_VI_SetFrameDepth(ViChn, u32Depth);
}

int vi_getYUV(char* yData)
{
   
	HI_S32 s32ret;
	VIDEO_FRAME_INFO_S stFrame;
	HI_VOID* yPtr;
	int len
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值