摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用
2014-02-08 10:23
351 查看
作者:jasonque
转自:/article/7941252.html
环境:
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 (运行程序)
如下图所示:
ARM板上:
运行结果:
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
转自:/article/7941252.html
环境:
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 (运行程序)
如下图所示:
ARM板上:
运行结果:
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
相关文章推荐
- 摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用
- 摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用
- linux_ok6410配置usb摄像头ZC3XX并在网页使用流媒体显示
- ARM开发板OK6410移植opencv-2.4.7库qt界面显示(附加各种问题解决方案)
- 【zz】ok6410上 使用DirecetFB支持Qt4.7.0
- 使用Qt+OpenCV+VideoInput 显示摄像头图像
- OK6410 解决Qt移植后触摸屏不能使用、鼠标无法移动问题
- OK6410-使用DirecetFB支持Qt4.7.0
- Qt + opencv mat转换成qimage后无法使用qpainter显示
- 使用Qt将一系列图片通过网络发送到客户端动态显示的参考代码(修改一下可以用作远程网络监控)。
- OK6410 Qt Segment fault
- 使用OpenCV读取摄像头图像并显示
- Qt组件显示输入的正则表达式使用总结
- Android照相功能驱动层中HAL的实现(基于OK6410开发板+OV9650摄像头)
- 嵌入式成长轨迹34 【嵌入式学习阶段】【ARM环境调试】【QT 移植环境及简单程序示例】---补充《ok6410 Qt移植百科全书》
- QT之让QDialogButtonBox::Ok 变成中文”确定“显示
- QT使用scrollarea显示图片,完美解决方案
- 11、新手入手树莓派教程--Qt中使用wiringPi来驱动RGB灯、使用opencv打开摄像头
- qt中使用scrollarea控件显示滚动条随窗口自适应变化
- QT5.2 + VS2012 给QWidget 对象使用setStyleSheet()设置背景图片运行不显示的问题