1.要实现的目的是远程视频监控,实现了由ARM板采集的编码视频回传到服务器上,但是出现一个问题由264编码文件的格式为YUV420编码格式文件,用它进行处理时,会出现很大的问题,编码文件的提醒。需要进行解码。
2.找到了H264的编解码源码,进行解码操作。首先找到主函数,寻找其读取文件的接口,在ldecod.c文件中,
Configure函数下,找到了文件接口,并且利用这个进行了解码,得到了test_dst.yuv视频文件
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; } }