当前位置: 技术问答>linux和unix
V4L图像采集程序
来源: 互联网 发布时间:2016-09-26
本文导语: 今天看了一篇关于V4L图像采集程序的代码 如下: int main() { char *buffer=NULL; v4ldevice VD; v4ldevice *vd=&VD; int frame=0; int f_d; f_d=open(DEFAULT_FILE_NAME,O_RDWR|O_CREAT,0666);//获取文件的描述符 ...
今天看了一篇关于V4L图像采集程序的代码
如下:
int main()
{
char *buffer=NULL;
v4ldevice VD;
v4ldevice *vd=&VD;
int frame=0;
int f_d;
f_d=open(DEFAULT_FILE_NAME,O_RDWR|O_CREAT,0666);//获取文件的描述符
if(0==v4l_open("/dev/video0",vd)) //打开设备
printf("open success!n");
else
printf("open failuren");
// set (vd);
if(0==v4l_set_norm(vd,norm))
printf("set_norm successn");
else
printf("set_norm failuren");
if(0==v4l_grab_init(vd,NTSC_WIDTH,NTSC_HEIGHT))//初始化设备,定义获取图像的大小
printf("init success!n");
else
printf("init failuren");
if(0==v4l_mmap_init(vd))//内存映射
printf("memory map success!n");
else
printf("memory map failuren");
if(0==v4l_grab_start(vd,frame))//开始获取图像
printf("get picture success!n");
else
printf("get picture failuren");
v4l_grab_sync(vd,frame);//等待传完一帧
buffer=(char *)v4l_get_address(vd);//得到这一帧的地址
printf("img address %pn",buffer);
write(f_d,buffer,NTSC_WIDTH*3*NTSC_HEIGHT);//报存到文件中
v4l_close(vd);
return 0;
}
我想问几个小问题。
1、 f_d=open(DEFAULT_FILE_NAME,O_RDWR|O_CREAT,0666);//获取文件的描述符
这行的0666是什么权限,我查了百度,只有诸如000001之类的权限。
2、 write(f_d,buffer,NTSC_WIDTH*3*NTSC_HEIGHT);//报存到文件中
为什么字节数是NTSC_WIDTH*3*NTSC_HEIGHT,尤其是中间那个3,搞不明白。。。
先问这2个小问题吧,望指教!!
如下:
int main()
{
char *buffer=NULL;
v4ldevice VD;
v4ldevice *vd=&VD;
int frame=0;
int f_d;
f_d=open(DEFAULT_FILE_NAME,O_RDWR|O_CREAT,0666);//获取文件的描述符
if(0==v4l_open("/dev/video0",vd)) //打开设备
printf("open success!n");
else
printf("open failuren");
// set (vd);
if(0==v4l_set_norm(vd,norm))
printf("set_norm successn");
else
printf("set_norm failuren");
if(0==v4l_grab_init(vd,NTSC_WIDTH,NTSC_HEIGHT))//初始化设备,定义获取图像的大小
printf("init success!n");
else
printf("init failuren");
if(0==v4l_mmap_init(vd))//内存映射
printf("memory map success!n");
else
printf("memory map failuren");
if(0==v4l_grab_start(vd,frame))//开始获取图像
printf("get picture success!n");
else
printf("get picture failuren");
v4l_grab_sync(vd,frame);//等待传完一帧
buffer=(char *)v4l_get_address(vd);//得到这一帧的地址
printf("img address %pn",buffer);
write(f_d,buffer,NTSC_WIDTH*3*NTSC_HEIGHT);//报存到文件中
v4l_close(vd);
return 0;
}
我想问几个小问题。
1、 f_d=open(DEFAULT_FILE_NAME,O_RDWR|O_CREAT,0666);//获取文件的描述符
这行的0666是什么权限,我查了百度,只有诸如000001之类的权限。
2、 write(f_d,buffer,NTSC_WIDTH*3*NTSC_HEIGHT);//报存到文件中
为什么字节数是NTSC_WIDTH*3*NTSC_HEIGHT,尤其是中间那个3,搞不明白。。。
先问这2个小问题吧,望指教!!
|
1、看一下linux下有关文件权限吧,如777、775之类的,前面那个0估计是8进制的意思,这里其实可以不使用,我open设备就不使用;
2、那个3,看一下图像处理方面的知识吧,好像是一个像素有3个字节,长*宽*3,写入文件大小。
不当之处,楼下指正。
2、那个3,看一下图像处理方面的知识吧,好像是一个像素有3个字节,长*宽*3,写入文件大小。
不当之处,楼下指正。