最近在弄Linux下的摄像头图像采集问题,开始的时候是学了会v4l(video for Linux),没弄成功,接着学习v4l2,网上给出了官方的示例程序,不过没有对图像进行处理或者保存,关键函数process_image() 只在屏幕打印一个点,表示摄像头取得一帧图像。想自己把这个函数写完整得以应用,发现不懂的东西太多,试了好几次都没成功,有朋友做过吗?求指导啊,急。。。。。。
下面是官方示例代码中的未实现的函数:
static void process_image (const void * p)
{
fputc ('.', stdout);
fflush (stdout);
}
下面是一个网友提供的实现函数,貌似也没成功
static void process_image(const void * p)
{
fputc('.', stdout);
fflush(stdout);
FILE * fp;
static int nCnt=0;
unsigned char *address;
char filename[128];
sprintf(filename, "pic%d.jpg", nCnt++);
fp=fopen(filename,"w");
if(fp==NULL){
perror("open file failure");
exit(-1);
}
fprintf(fp,"P6\n%d %d\n255\n",MAX_W,MAX_H);
address =(unsigned char *)p;
if(address==NULL){
perror("get mapaddress Failed!");
exit(-1);
}
fwrite(address, MAX_W, 3*MAX_H, fp);
fclose(fp);
}
这个网友肯定是想得到jpg格式的图片,我猜想 fprintf(fp,"P6\n%d %d\n255\n",MAX_W,MAX_H); 是在图片文件前先写图片的格式头,后面的是写图片数据,不过,jpg图片的格式头,是这样的吗?我用UltraEdit打开任意一张jpg图片,写在最前面的表示格式的,都是FF D8 FF E0 开始的啊?不是"P6\n.....对应的16进制。。。