C программа для захвата веб-камеры

Я пишу простой код C для захвата с моей веб-камеры и сохраняю его в виде файла jpeg в Ubuntu. Вот используемый код:

 #include <stdio.h>
 #include <stdlib.h>
 #define SIZE 76800 // number of pixels (320x240 for my webcam)
 int main() {
    FILE *camera, *grab;
    camera=fopen("/dev/video0", "rb");
    grab=fopen("grab.jpeg", "wb");
    float data[SIZE];
    fread(data, sizeof(data[0]), SIZE, camera);
    fwrite(data, sizeof(data[0]), SIZE, grab);
    fclose(camera);
    fclose(grab); 
    return 0;
 }

Полученный файл не является jpeg, как я могу изменить свой код, чтобы получить файл jpeg или png в конце?


person Ahmed Mkadem    schedule 16.01.2017    source источник
comment
Вы бы рассмотрели возможность использования OpenCV?   -  person k_kaz    schedule 16.01.2017
comment
Я с трудом могу себе представить, что может быть отображение 1 поплавка, представляющего 1 пиксель. Вы записываете необработанные данные (в каком бы формате они ни были). Если вы хотите создать определенный формат файла, вы должны посмотреть спецификации для этого формата или использовать какую-либо графическую библиотеку.   -  person Gerhardh    schedule 16.01.2017
comment
Я бы посоветовал вам прочитать что-нибудь о V4L2. Но грубое предположение заключается в том, что ваша веб-камера основана на USB UVC, который обычно представляет собой формат изображения MJPEG или YUV422 и обычно представляет собой видеопоток, а не одно неподвижное изображение.   -  person user3528438    schedule 17.01.2017


Ответы (1)


Это не сработает. Потому что камера — это сложное устройство, и вам нужно установить разрешение, цветовую схему и некоторые другие важные данные, чтобы начать захват.

Вы должны использовать что-то вроде libuvc.

https://ken.tossell.net/libuvc/doc/group__device.html

Вы можете проверить здесь. В строке 614 пытаются найти устройство и использовать его для захвата камеры. Я думаю, это отличный пример.

https://github.com/gadLinux/OpenHMD-RiftPlayground/blob/master/src/main.c

В основном вам нужно инициализировать контекст, найти камеру и использовать ее.

person Gonzalo Aguilar Delgado    schedule 25.11.2018