环境:
Ubuntu10.04
arm linux OS: 3.0.1
arm上 qt-4.7.1
g++ / gcc 4.4.3
arm-linux-g++ / arm-linux-gcc 4.3.2
特别标注:
有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在CSDN博客上,可以到CSDN博客来阅读。
简单思路: 先在ubuntu上实现,再移植ARM上实现。
在开始之前,先聊聊我辉煌的摄像头选择之路吧。
linux上特别是ARM上对摄像头的使用有一定的要求,并不像Windows上随便买一个插上去就可以使用的。由于咱做的是上层应用,对嵌入式了解还甚少,所以不能更深层地从底层驱动去讲解摄像头方面的知识。就把咱了解到的简单总结一下吧。
也许开发板商家有配对的摄像头模块可以选用,但考虑到价格和通用性,决定放弃这方面的选择。(新手慎重,虽然我也是新手)
比较通用的就是咱常用的USB摄像头,但这里面的选取也有些讲究,玩linux图像采集处理的人一般都知道V4L2(video 4 linux 2),是针对UVC免驱USB设备编程框架,主要用于采集USB摄像头等【1】,具体资料可以查询“百度百科”。(庆幸)现在市面上很多摄像头的输出格式都是UVC,这里可以查看到你的摄像头是否符合V4L2【2】 。
我所使用的摄像头是“现代V26”(这是我从垃圾堆里翻出来的,应该有一定年代了,分辨率是640*480的,编程时使用的是320*240,其他的具体不详,图片是网上搜索的,原因是拍照太麻烦)
我这个摄像头经过后期测试,证明是可以使用的(请看下文)。但又出现一个问题,ubuntu上使用是非常流畅的,但在ARM上使用就非常卡,图片显示实时性要延时2秒左右,相当蛋疼,这怎么搞图像实时处理?
由于后期做视觉处理肯定得用到opencv,那就是说我要处理的是IplImage格式的图像,也就是得做UVC到IplImage的转换,这怎么搞呀,难道真得走UVC转QImage转IplImage这样的流程?
网上查询说有直接输出JPEG格式的摄像头,这样就不用转换,直接处理输出,速度会有很大提升。最后找到了“中星微ZC301”,最后也买了两个(这张是用现代V26自拍的)
蛋疼时刻又开始了,首先这个摄像头输出的确实是JPEG格式,但像素低,而且还要自己上驱动(这是老版摄像头的标志性行为),购买时,淘宝店主说在linux2.6能够正常使用,我说我用的是arm linux3.0.1,店主建议我买回来试试,我一下子花费几十大洋买了两个(JPEG格式的太难找了,看到这个我已经无法自控两眼冒尿了,哪还考虑能不能用呀)。
到手之后,苦B的我赶紧测试,在ubuntu上测试成功(高兴的手舞足蹈),在ARM板上测试,段错误,失败,段错误,再失败,失败,一脸盆的失败!询问淘宝店主,不予技术帮助,找飞凌,电话一辈子都在忙,论坛好几天没回应。网上寻求帮忙,一大堆的废话,无非就是换系统,或者就是改驱动,这不是欺负我上层应用出身吗?,哎,多方寻求无果,颓了。
难道真要我从linux3.0降到2.6吗???这不行,动作太大了,这牵扯的东西太多,很多东西都得重新做。(这是我接触ARM来感觉最为蛋疼的东西,只要某些东西版本一改动,很多东西都得跟着动,更何况这是系统版本呀!!!)
实在没办法,居于我现在能力有限,只能痛下决心,放弃JPEG摄像头,使用UVC摄像头。
至此,摄像头选择完毕!
上面废话了这么多,现在来这是说说实现过程吧。
1、先确保UVC输出格式的USB摄像头是可以使用的,飞凌提供了一个testcam.c的检测程序,可以在ok6410-b 的linux3.0.1版本使用,可以在 这里下载 效果如下图所示:
运行效果:
2、下来就结合QT,实现摄像头的界面显示。
再次,特别感谢这位长相喜人的仁兄帖子《Linux下用QT打开摄像头并显示》【3】 只要把它帖子显示的5个部分代码保存成相应的文件,然后编译即可实现他所说的功能。我的工程文档可以 在此下载。编译使用流程如下:
1)在帖子中复制代码,保存成相应文件;
2)在终端中进入相应文件夹,运行命令:
# qmake -project (生成工程文件)
# qmake (生存Makefile文件)
# make (编译工程)
# ./qtcamera (运行程序)
如下图所示:
运行结果:
ok,ubuntu上运行没有问题,下来就移植到ARM上运行。
3、把qtcamera程序移植到ARM上,流程如下:
1)在帖子中复制代码,保存成相应文件;
2)把processImage.cpp文件里的摄像头设备名称修改为 /dev/video2 (具体什么名称,可以到arm板子的 /dev 目录里看看,再具体修改)
3)在终端中进入相应文件夹,运行命令:
# qmake-arm -project (生成工程文件,注意你是否编译安装有qmake-arm)
# qmake-arm (生存Makefile文件)
# make (编译工程)
在ARM上运行命令如下:
# ./qtcamera -qws (运行程序)
如下图所示:
4、ok,摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用至此就完结了。
Good Luck!
附录:
再次附上源码下载地址:
1、飞凌提供的OK6410B摄像头测试程序下载
2、qtcamera_PC(Linux下用QT打开摄像头并显示)
3、qtcamera_ARM(OK6410B用QT打开摄像头并显示)
参考:
【1】百度百科《V4L2》 http://baike.baidu.com/view/5494174.htm
【2】Linux UVC driver and tools http://www.ideasonboard.org/uvc/
【3】《Linux下用QT打开摄像头并显示》http://www.oschina.net/code/snippet_124925_3789