私はCでfreadとfwriteを少し試していたので、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標準1.01。ファイルは画像ビューアで表示できましたが、少ししか飽和しませんでした。
これはどうやって起こりますか?私は、ソースまたはプログラムでJPEGエンコードライブラリを使用しませんでした。カメラはJPEGをネイティブに出力しますか?ウェブカメラは、Logitechによって製造されたSony PlayStation 2 EyeToyです。システムはDebian Linuxです。
はよくカメラがJPEGファイルを出力しているかもしれません。 – doron