在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()通常是不够的? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
