我正在用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