在Linux中读取USB网络摄像头的输出

前端之家收集整理的这篇文章主要介绍了在Linux中读取USB网络摄像头的输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中用fread和fwrite进行了一些实验,所以我在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,grab);
    fclose(camera);
    fclose(grab); 
    return 0;
}

程序工作时编译(gcc -o snap camera.c).令我吃惊的是输出文件不是原始数据转储,而是JPEG文件.文件命令在程序输出文件的linux上的输出显示为JPEG图像数据:JFIF Standard 1.01.该文件在图像查看器上可见,虽然有点饱和.

如何或为什么会发生这种情况?我没有在源或程序中使用任何JPEG编码库.相机输出JPEG本机吗?网络摄像头是由罗技制造的Sony Playstation 2 EyeToy.该系统是Debian Linux.

解决方法

Sony EyeToy具有OV7648传感器,具有非常受欢迎的OV519桥. OV519以JPEG格式输出帧,如果我从我自己的摄像机正确地记录了它支持的唯一格式.

像这样的摄像机需要应用程序支持,或需要在发送给用户空间之前解压缩帧的特殊驱动程序.显然,在您的情况下,驱动程序以原始格式提供JPEG帧,这就是为什么您在输出获取JPEG数据.

BTW,你应该看看Video4Linux2 API在Linux上访问视频设备的正确方法 – 一个简单的open()/ read()/ close()通常是不够的?

原文链接:https://www.f2er.com/linux/393882.html

猜你在找的Linux相关文章