读书人

孙其功陪你学之C语言读取kinect取

发布时间: 2013-10-27 15:21:49 作者: rapoo

孙其功陪你学之——C语言读取kinect获得的深度数据.pgm文件

C语言读取kinect获得的深度数据.pgm文件:

本人在做项目时需要用kinect获取深度数据,并把数据存放到.pgm文件中,然后使用时读取

在写读取程序时遇到好多问题,比如类型转换问题最是头疼,但功夫不负有心人,终于搞定,

在此分享

如下链接是对.pgm文件的简单介绍

http://blog.csdn.net/a350203223/article/details/13122001

short mat[640*480];

int nextline(char *line, FILE *fp)
{
char *p;
do {
p = fgets(line, HEADER_MAXLINE, fp);
} while ( p != NULL && *p == '#' );
if( p==NULL )
return -1;
return 0;
}

int read_header(FILE *fin, int *widthp, int *heightp, int *maxvalp, int *comp)
{
char line[HEADER_MAXLINE];
int cols,rows,maxval;
if(nextline(line, fin)!=0)return -10;
if(strncmp(line,"P5",2)==0)
*comp=1;
else if (strncmp(line,"P6",2)==0)
*comp=3;
else if (strncmp(line,"P7",2)==0)
*comp=4;
else
return -1;
if(strlen(line)>3)
{
if(sscanf(line+2,"%d %d %d",&cols,&rows,&maxval )!=3 )
return -1;
}
else
{
if(nextline(line, fin)!=0)return -10;
if(sscanf(line,"%d %d",&cols,&rows)!=2 )
return -1;
if(nextline(line, fin)!=0)return -10;
if(sscanf(line,"%d",&maxval)!=1)
return -1;
}
*widthp = cols;
*heightp = rows;
*maxvalp = maxval;
return 0;
}

void read_pgm_image(char * image_name , int * rows, int * cols)
{
FILE * fp;
int widthp;
int heightp;
int maxvalp;
int comp;
short max=0;
fp = fopen(image_name, "rb");
read_header(fp, &widthp, &heightp, &maxvalp,&comp);
*rows = heightp;
*cols = widthp;
// *image = (short )malloc(widthp*heightp);
//fread(*image,1,512,fp);
fread(mat,2,widthp * heightp,fp);
fclose(fp);

}

在main()函数中应用如下:

int rows=0,cols=0;

read_ppm_image("rgb_1.ppm" , &rows, &cols);
*mat = (short )malloc(640*480);

读书人网 >C语言

热点推荐