摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用

环境:

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

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第1张图片


特别标注:

有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在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,其他的具体不详,图片是网上搜索的,原因是拍照太麻烦)

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第2张图片

我这个摄像头经过后期测试,证明是可以使用的(请看下文)。但又出现一个问题,ubuntu上使用是非常流畅的,但在ARM上使用就非常卡,图片显示实时性要延时2秒左右,相当蛋疼,这怎么搞图像实时处理?

由于后期做视觉处理肯定得用到opencv,那就是说我要处理的是IplImage格式的图像,也就是得做UVC到IplImage的转换,这怎么搞呀,难道真得走UVC转QImage转IplImage这样的流程?

网上查询说有直接输出JPEG格式的摄像头,这样就不用转换,直接处理输出,速度会有很大提升。最后找到了“中星微ZC301”,最后也买了两个(这张是用现代V26自拍的)

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第3张图片

蛋疼时刻又开始了,首先这个摄像头输出的确实是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版本使用,可以在 这里下载 效果如下图所示:

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第4张图片

运行效果:

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第5张图片


2、下来就结合QT,实现摄像头的界面显示。

再次,特别感谢这位长相喜人的仁兄帖子《Linux下用QT打开摄像头并显示》【3】 只要把它帖子显示的5个部分代码保存成相应的文件,然后编译即可实现他所说的功能。我的工程文档可以 在此下载。编译使用流程如下:

1)在帖子中复制代码,保存成相应文件;

2)在终端中进入相应文件夹,运行命令:

# qmake -project     (生成工程文件)

# qmake     (生存Makefile文件)

# make     (编译工程)

# ./qtcamera      (运行程序)

如下图所示:

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第6张图片


摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第7张图片

运行结果:

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第8张图片

ok,ubuntu上运行没有问题,下来就移植到ARM上运行。


3、把qtcamera程序移植到ARM上,流程如下:

1)在帖子中复制代码,保存成相应文件;

2)把processImage.cpp文件里的摄像头设备名称修改为 /dev/video2 (具体什么名称,可以到arm板子的 /dev 目录里看看,再具体修改)

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第9张图片

3)在终端中进入相应文件夹,运行命令:

# qmake-arm -project     (生成工程文件,注意你是否编译安装有qmake-arm

# qmake-arm     (生存Makefile文件)

# make     (编译工程)

在ARM上运行命令如下:

# ./qtcamera -qws      (运行程序)

如下图所示:

摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第10张图片


摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第11张图片
ARM板上:
摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第12张图片
运行结果:
摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用_第13张图片


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




你可能感兴趣的:(linux,ubuntu,qt,ARM,视觉)