opencv学习笔记-入门(32)264文件解码即YUV420文件格式图像的显示

1.要实现的目的是远程视频监控,实现了由ARM板采集的编码视频回传到服务器上,但是出现一个问题由264编码文件的格式为YUV420编码格式文件,用它进行处理时,会出现很大的问题,编码文件的提醒。需要进行解码。


2.找到了H264的编解码源码,进行解码操作。首先找到主函数,寻找其读取文件的接口,在ldecod.c文件中,

Configure函数下,找到了文件接口,并且利用这个进行了解码,得到了test_dst.yuv视频文件

opencv学习笔记-入门(32)264文件解码即YUV420文件格式图像的显示_第1张图片

3.利用原代的opencv中读取文件的函数根本无法读取yuv文件,因此自己写了个文件数据读取转换为图片的事例。

在这个转化过程中分为以下几步

(1)首先定义了图像的宽度和高度,并且一幅图像所含的数据个数。因为YUV420采用的是YUYVYUYV.....U和V间隔排列的,因此的图像数据大小为

                   const int framesize = width * height * 3 / 2; 
例如:排列举例: 2*2图像 YYYYUV; 4*4图像 YYYYYYYYYYYYYYYYUUUUVVVV

注意:它和RGB图像的数据个数是不同的

(2)因此我们将数据读取了出来,并且得出数据的个数,以及图像的帧数,然后建立了一个单通道的IplImage图形,将每幅图像的Y通道数据进行填充,这样得到了一幅黑白图。下载文件:opencv-YUV显示

//存储到图像
	namedWindow("yuv",  1);
	IplImage *y = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
	for(int i = 1; i <= NumberPixe; i += framesize)
	{
		fin.seekg(i);
		fin.read((char*) &pl, sizeof pl);
		cvSetData(y, pl.name, width);

		cvShowImage("yuv", y);

		int c = waitKey(30);
		if((char)c == 27)
		{
			break;
		}
	}




你可能感兴趣的:(c,服务器,存储,图形)