读取YU12文件中的Y分量内容,并一桢一桢的保存下来

来源:互联网 发布:淘宝立体3d服装拍摄 编辑:程序博客网 时间:2024/05/19 12:39
#include "stdafx.h"#include <iostream>#include "Lvector.h"#include <vector>#include <stdio.h>#include <assert.h>#include "cv.h"#include "highgui.h"// #include <afx.h>using namespace std;//YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)int main(){FILE *fp = fopen("aa.yv12","rb");unsigned char * pBuffer = new unsigned char [704*576];int len = 0;int i = 0;IplImage *pIplImage=cvCreateImage(cvSize(704,576),IPL_DEPTH_8U,1); //创建但通道的位深为8位的IplImage格式的图象while (true){len = fread(pBuffer,1,704*576,fp);//读取一桢Y分量的大小if(pIplImage){ i++;memcpy(pIplImage->imageData,pBuffer,704*576);//pYData,nYSizechar path[128] = {0};sprintf(path,"%d_.jpg",i);  cvSaveImage(path,pIplImage);}if (len == 0){break;}fread(pBuffer,1,704*576/4,fp);//读取一桢U分量的大小,加这两句,就是为了把U、V分量去掉fread(pBuffer,1,704*576/4,fp);//读取一桢V分量的大小}cvReleaseImage(&pIplImage);fclose(fp);}

 

函数原型

size_t fread ( void   *buffer,  size_tsize,  size_tcount,  FILE *stream) ;

功 能

从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功返回 0。

参 数

buffer
用于接收数据的内存地址,大小至少是size*count字节.
size
单个元素的大小,单位是字节
count
元素的个数,每个元素是size字节.
stream
输入流

返回值

实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误.
从ferror和feof获取错误信息或检测是否到达文件结尾.

memcpy

函数原型

void *memcpy(void *dest, const void *src, size_t n);

功能

从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

 

原创粉丝点击