基于OpenCV与USB工业相机零件检测系统的图像处理

更新时间:2024-03-05 作者:用户投稿原创标记本站原创 点赞:34935 浏览:159516

摘 要 :针对OpenCV库函数在Linux平台下不能直接获取非V4L接口的USB工业相机视频流和IplImage结构的图像不能直接显示于Qt控件中的问题,提出了一种新的解决方法:共享数据流法,并在Qt集成开发环境下完成共享数据流法的程序代码编写;最后通过与原有方案的实验对比,验证了共享数据流法的可行性和优越性,为实现高速高精度机械零件检测系统打下良好的基础.

关 键 词 :图像处理;OpenCV;USB工业相机;Linux

中图分类号:TN919—34;TP319文献标识码:A文章编号:1004—373X(2012)18—0128—05

引言

随着科学技术的发展,机器视觉技术日益俱进,其应用越来越广泛,尤其是在机械零件检测方面,由于它具备非接触式测量、测量精度高、测量速度快等特点,在许多场合已经逐步代替了传统测量方式[1].而开源计算机视觉库OpenCV是研究机器视觉必不可少的资源,因此出于成本、稳定性、移植性、开发周期等原因,人们开始在各种平台上运用OpenCV研究开发机器视觉应用软件,近些年来,基于Linux平台较为热门[2].

在Linux平台下OpenCV的使用还存在着局限性,首先是获取视频流函数cvCreateCameraCapture(),只支持IEEE1394和V4L接口的视频设备(IEEE1394和V4是在linux内核中视频设备的API接口).但目前支持V4L接口的USB工业相机并不多,因此采用USB工业相机的开发者,面对OpenCV的强大资源只能叹为观止;其次是OpenCV的Highgui库不支持Qt的后台开发,IplImage结构图像不能通过函数cvShowImage()直接显示到开发软件控件中.针对这两个问题,目前较为通用的解决方法就是图像格式的转换,这种转换法占用较多的软硬件资源,处理速度也较慢.因此,本文基于USB工业相机硬件平台和Qt,OpenCV软件平台,提出了一种新的研究方法,并通过实验验证了其可行性.

1硬件系统平台

本文使用的硬件平台框架图如图1所示.该平台采用德国ISD公司的UI—2440工业相机,该相机采用USB接口取代传统的板卡式与上位机连接,降低成本,数据传输速度快,即插即用,方便操作,支持Window,Linux等操作系统.平台还采用了步进电机和滚珠丝杠作为执行机构,用户可以准确、方便地控制工作为执行机构,用户可以准确、方便地控制工作台的升降位置,从而实现相机物距的准确定位.在本文中主要基于该硬件平台对图像采集、处理与显示的研究.

软件应用程序的开发是在PC机上完成的,PC机上的开发环境是Ubuntu11.10.Ubuntu操作系统具有源码开放、软件完全免费、系统稳定、安全可靠、可裁剪、移植性好等显著优点,近些年来,越来越受到企业及个人用户的青睐[2].本设计还需要在Ubuntu下安装Qt、OpenCV和ueyeSDK等软件工具包.

本设计应用程序主要以OpenCV库和Qt集成开发环境为核心,负责处理视频数据采集、处理与图像显示.

开放源代码的计算机图像处理库OpenCV(IntelOpenSourceComputerVisionLibrary)是由一些C函数和C++类所组成的库,用来实现图像处理及计算机图像算法.OpenCV具有以下优点:

(1)OpenCV库为开源的免费软件,开发者不仅可以对其源代码进行修改,还可以添加自主研发的类库,以提高软件开发的灵活性,节约开发成本;

(2)OpenCV库提供了丰富的图像处理函数,开发者无需再花大量的时间自己编写,可以缩短开发软件周期,提高了开发效率;

(3)OpenCV库中大部分函数都经过汇编优化,基于OpenCV开发的应用软件具有较高的运行效率[3].

Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程.Qt具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点.本设计应用程序主要基于Qt开发[4].

3图像采集与显示关键技术

目前,在Linux平台下对非V4L和IEEE1394接口的摄像设备使用OpenCV,许多学者主要以图2中的方案(文中称转换法)进行处理[5].

首先,利用相机的SDK开发包中的相关函数直接从相机中读取图片[6],将其转换成IplImage结构,然后调用OpenCV相关函数进行处理,再将其转成QImage格式在Qt控件中显示.从采样到显示,图像要经过2次格式转换.这样的转换过程,运算量增加,不但占用较多的CPU和内存资源,而且也会使得图像的显示频率降低,造成采样数据因不能及时显示而丢失或是降低采样频率来响应显示频率;更重要的是在图像转换过程中数据流总存在着或多或少的丢失,影响原有图片的质量,最终降低检测系统的测量精度.