最近在进行机器视觉系统的搭建,积累了经验,想和大家讨论、互相学习。相机是图像的来源。为了搭建视觉系统,完成图像分析、机器视觉任务,需要编程控制相机按工作所需的曝光、增益和帧率同步采集和存储图像。工业相机通常支持C/C++程序进行控制,提供了SDK(Software Development Kit)。这些SDK包括对相机进行基本控制的函数,利用这些函数,就可以控制相机参数(如曝光时间、增益、帧率、像素格式),满足视觉系统任务需求。
1.1相机选型
工业相机分为彩色工业(CCD芯片)相机和黑白工业相机(CMOS芯片)。芯片的三个关键参数是:靶面尺寸(感光芯片的尺寸)、分辨率(图像宽高)和像元大小。在同样的镜头焦距和同样的靶面尺寸下,分辨率越高,图像的物面分辨率就越高。相同的价格下黑白工业相机的分辨率更高、噪声更小图像处理更简单,适合用于视觉测量、工业视觉等任务场景;彩色相机能获取的信息则更为丰富,适用于人脸检测、物体识别等任务。
另外选择相机还需要注意其数据传输方式,一般有Gige和usb3.0两种。Gige数据传输更稳定,usb3.0传输速度更快。
1.2相机SDK
我参与的项目采用的是海康MV-023-10UM相机,相机分辨率230万,像元尺寸5.86um。首先下载海康SDK。https://www.hikrobotics.com/cn/machinevision/service/download?module=0。下载机器视觉工业相机客户端MVS。建议默认安装路径安装。安装好后打开下面的文件夹,这里就是海康相机的软件开发包了。
Includes文件夹下就是SDK的头文件,包括了用户可以使用的函数和变量的声明。Libraries文件夹下是静态链接库,内容应该是头文件里声明的函数的定义。Samples目录下就是二次开发示例。
我用的是VS2015,打开这个sample进行解读。因为在C盘下,所以需要给权限运行。如图选择使用不同的凭据重新启动此应用程序。
跑起来后可以看到一个的界面。可以打和初始化相机。
这是一个基于MFC框架的界面程序,需要了解的实际上只有三组文件(或者说三路文件)。一是MvCameraControl.h和MvErrorDefine.h和PixelType.h和CameraParams.h这几个文件就是前面的SDK的include里的头文件;二是MvCamera.h和MvCamera.cpp这是海康对SDK里的API和变量进行的二次封装,方便