最近使用LabVIEW对海康机器人的工业相机进行二次开发,没有专门介绍LabVIEW的开发手册,本文就简单的写一写单相机取图显示以及存图的开发步骤。
如果各位是直接使用IMAQdx开发的,可以直接下载文章末尾附件,后续有时间也会出一版使用Imaqx搭建的单相机取图显示、存图以及更改参数的demo,欢迎各位留言交流。
他们的开发程序demo是和MVS客户端绑定的,因此只要在官网上下载了客户端安装后,相应的路径下会有支持各种开发语言的示例程序。观看本文前,强烈强烈强烈建议先看下这篇文章,海康工业相机参数设置与获取。
对应的SDK路径下的示例程序
LabVIEW文件夹内内容如下:
文件夹名称 | 描述 |
MvLVLib | 封装的子VI(每个子VI都是通过C的dll封装过来的) |
Samples | 单相机取图显示的程序 |
TwoCameraSamples | 两个相机取图显示的程序 |
一、前提
本文章主要对单相机取图显示程序进行解释说明,建议开发者在开发之前可以先看看他们的C语言开发指南手册中流程引导说明,具体介绍了相机开发的通用步骤,以及海康工业相机参数设置与获取的文章。
二、自带示例程序介绍
上述流程也是我们引用子VI的流程,前面板如图所示,主要能实现了相机连续取图以及软触发取图。
后面板逻辑主要是根据点击每个按钮后进行不同的操作:
- Refresh Devices:EnumDevices.vi枚举电脑连接相机,并区分网口和U口
- Open Device:获取相机信息,CreateHandle.vi创建句柄,OpenDevices.vi打开相机
- Continuous:SetEnumValue.vi设置触发为OFF
- TriggerMode:SetEnumValue.vi设置触发模式为ON,SetEnumValue.vi设置触发源为软触发(7-软触发),为什么7表示软触发,建议观看开头说的设置海康工业相机参数的文章
- Start:GetIntValue.vi获取数据包大小(PayloadSize)的值,GetIntValue.vi获取图像格式的值,这两个参数获取在这里只是演示,可以直接不写。StartGrabbing.vi开始取图,使得AcquisisionFlag为正,触发调用GetOneFrameTimeout.vi进行取图。图中的1080001,2180014可查看MVS,即可看到表示的图像格式。
- TriggerOnce:SetCommandValue.vi执行软触发命令
- Acquisition中的Stop按钮:StartGrabbing.vi停止抓图
- CloseDevice:CloseDevice.vi关闭相机,DestroyHandle.vi销毁句柄,
三、如何设置参数及存图
3.1 设置参数
相机参数(曝光、增益、图像格式、触发等等)获取和设置是在打开设备之后,开始取流之前。
下图为调用SetFloatValue.vi设置曝光
3.2 存bmp图(调用SaveImageToFile.vi)
参考工业相机SD开发指南手册
实际而言,我们只需要知道
参数 | 描述 |
nWidth | 图像宽度 |
nHeight | 图像高度 |
pData | 图像数据缓存(主动取图接口vi中的 pData Out) |
enImageType | 保存图像格式 (1-bmp,2-Jpeg,3-Png,4-Tiff) |
enPixelType | 相机图像格式 |
nDataLen | 数据长度(主动取图接口vi中的 nFrameLen) |
四、附件说明
上图所示程序见附件一(链接:https://pan.baidu.com/s/1qAX-8mt3HdMhc3h9ep8KNQ 提取码:z519)
下图Imaqdx程序见附件二(链接:https://pan.baidu.com/s/1KcsWhhOCBvtVtFQej_cutw 提取码:1wfp)
五、后记
海康工业相机的示例程序,涵盖的开发语言比较多,但是就LabVIEW而言,目前提供的示例程序较少,欢迎各位大佬不吝赐教。另外也推荐几个博主,个人感觉其开发内容还是不错的。