我正在用fread和fwrite在C中进行一点点试验。于是我用C编写了这个小程序,以便从网络摄像头获取数据并将其转储到文件中。以下是来源:在Linux中读取USB摄像头的输出
#include <stdio.h>
#include <stdlib.h>
#define SIZE 307200 // number of pixels (640x480 for my webcam)
int main() {
FILE *camera, *grab;
camera=fopen("/dev/video0", "rb");
grab=fopen("grab.raw", "wb");
float data[SIZE];
fread(data, sizeof(data[0]), SIZE, camera);
fwrite(data, sizeof(data[0]), SIZE, grab);
fclose(camera);
fclose(grab);
return 0;
}
该程序在编译时工作(gcc -o snap camera.c
)。令我吃惊的是,输出文件不是原始数据转储,而是JPEG文件。在程序输出文件上的linux上file
命令的输出显示它是JPEG图像数据:JFIF Standard 1.01。该文件可以在图像查看器上查看,尽管有点饱和。
这是怎么发生的?我没有在源代码或程序中使用任何JPEG编码库。相机是否本地输出JPEG?该网络摄像头是由罗技制造的索尼Playstation 2 EyeToy。该系统是Debian Linux。
很可能摄像机输出的JPEG文件。 – doron 2012-08-06 14:59:19