Чтение вывода USB веб-камеры в Linux
Я немного поэкспериментировал с fread и fwrite на C. Поэтому я написал эту небольшую программу на C, чтобы получать данные с веб-камеры и выгружать их в файл. Ниже приводится источник:
#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. Выход изfile
Команда на linux в выходном файле программы показала, что это были данные изображения JPEG: JFIF Standard 1.01. Файл можно было просматривать в программе просмотра изображений, хотя он был немного насыщенным.
Как или почему это происходит? Я не использовал никакие библиотеки кодирования JPEG в источнике или программе. Камера выводит JPEG изначально? Веб-камера Sony Playstation 2 EyeToy, изготовленная компанией Logitech. Система является Debian Linux.