加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:30:40 所属栏目:Linux 来源:网络整理
导读:我在C中用fread和fwrite进行了一些实验,所以我在C中写了这个小程序,从网络摄像头获取数据并将其转储到一个文件中.以下是来源: #include stdio.h#include stdlib.h#define SIZE 307200 // number of pixels (640x480 for my webcam)int main() { FILE *camer
我在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()通常是不够的?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读