• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : V4L2读取摄像头图像出错 复制链接 | 浏览器收藏 | 打印
战略很重要
级别: 侠客
UID: 12425
精华: 0
发帖: 60
金钱: 300 两
威望: 60 点
综合积分: 120 分
注册时间: 2010-01-06
最后登录: 2011-09-05
楼主  发表于: 2010-03-25 18:17

 V4L2读取摄像头图像出错

我使用的摄像头是奥尼的,然后系统中已经包含有了UVC驱动,并且摄像头芯片被驱动支持。我想使用V4L2来对摄像头进行操作,一些基本的操作都没有问题,我将采集到的图像数据打印出来发现数据出错,很多地方都是相同的,并且会出现负值。然后我将采集到的图像数据写入文件中使用yuvview打开,显示的图像也不对。请问有没有用过V4L2接口对摄像头进行操作的,这可能是个什么问题?
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
1楼  发表于: 2010-03-25 19:20
我也在尝试使用V4L2。我把文档例子给的capture.c稍微简化了下,然后把process_image()函数添了些东西,用附送的摄像头在PC机的Fedora 12上可以编译通过,并能将拿到的数据转为BMP格式存盘。
问题是交叉编译后的程序放在板子上运行不了,在VIDIOC_S_FMT地方出了错。我选的type是YUYV,按说应该没问题的,摄像头应该支持这种格式,否则PC上就应该报错。但是在板子上就是通不过,尝试用VIDIOC_G_FMT和VIDIOC_TRY_FMT来查询一下设置,结果仍然报错,都是“Invalid argument”
战略很重要
级别: 侠客
UID: 12425
精华: 0
发帖: 60
金钱: 300 两
威望: 60 点
综合积分: 120 分
注册时间: 2010-01-06
最后登录: 2011-09-05
2楼  发表于: 2010-03-25 23:12

 回 1楼(gdglacier) 的帖子

我的貌似在主机上运行都有问题,你的函数修改了哪些地方呢 能吧文件传给我看下吗?谢谢
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
3楼  发表于: 2010-03-25 23:28
可以,已发送到你的注册邮箱
战略很重要
级别: 侠客
UID: 12425
精华: 0
发帖: 60
金钱: 300 两
威望: 60 点
综合积分: 120 分
注册时间: 2010-01-06
最后登录: 2011-09-05
4楼  发表于: 2010-03-26 00:57
好的 收到 谢谢了 明天去实验下再给你回复
战略很重要
级别: 侠客
UID: 12425
精华: 0
发帖: 60
金钱: 300 两
威望: 60 点
综合积分: 120 分
注册时间: 2010-01-06
最后登录: 2011-09-05
5楼  发表于: 2010-03-27 00:36

 回 1楼(gdglacier) 的帖子

我用你的代码在开发板上也可以运行,你的开发板上使用的内核是多少?我的是2.6.30的,可能是你内核版本支持不够吧?
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
6楼  发表于: 2010-03-27 15:12
好像是2.6.29 的,内核应该支持。
可能因为我自己做的Cross-Compiler没有设置好apcs什么的造成的
你用的是mini2440自己给的全部环境么?
能给我一个列表么?如果是友善的请用括号注明
Bootloader:
Kernel:
FileSystem:
Cross-Compiler:
[ 此帖被gdglacier在2010-03-27 15:29重新编辑 ]
级别: 新手上路
UID: 16789
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
综合积分: 14 分
注册时间: 2010-03-21
最后登录: 2016-10-16
7楼  发表于: 2010-03-29 11:23
我也碰到这样的问题,我用同样的摄像头在ubuntu上能用 内核版本 2.6.28,但是用同样的代码,同样的摄像头在设置VIDIOC_S_FMT出错了,但是用mini2440板上测试程序是可以用这个摄像头,说明驱动没问题的吧
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
8楼  发表于: 2010-03-29 12:38
这两天又翻了翻资料,个人感觉驱动的可能性最大。摄像头插上后终端会提示信息“UVC”,而我去UVC的网站看到的列表里并没有0c45:62f0这个编号,可能要自己稍微改下内核的驱动源代码。
    至于S_FMT的问题,究其根源似乎是由于上述驱动支持问题,导致设备不能使用YUYV模式。我尝试用ENUM_FMT,结果返回的结果是"MJPG"而不是"YUYV",也就是说0c45:62f0这个ID的设备在ARM-Linux中被认为不能工作在"YUYV"模式下。所以在S_FMT中使用"YUYV"会报错。而改用"MJPG"后就可以S_FMT了。不过取回的数据格式我并不了解,所以不会处理。Google了一下MJPG,似乎没有比较直接的信息,可能要查点手册了。
    不过就PC上的情况看,有点纠结。因为PC上ENUM_FMT后的结果是"YUYV",所以这让我感觉是驱动的问题。也许应该把内核的UVC支持关掉,下载并修改最新的UVC源代码,然后以module的方式编译下载到ARM上启动时加载,这个也许可行。
    不过目前这还只是设想,不知道能起作用不。
级别: 新手上路
UID: 11579
精华: 0
发帖: 12
金钱: 65 两
威望: 16 点
综合积分: 24 分
注册时间: 2009-12-13
最后登录: 2010-08-14
9楼  发表于: 2010-04-12 15:24

 回 1楼(gdglacier) 的帖子

您好,您的process_image添加的函数能给我看看吗,我也在研究摄像头采集的问题,十分感谢
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go