环境说明:Ubuntu16.04
海康威视SDK包:MVS-2.1.0_x86_64_20201228.tar.gz
如若在Windows环境下配合Visual Studio使用请移至:
海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)
海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(二)
记录自己的学习过程,方便以后查阅,若有错误或遗漏,欢迎大佬指正补充。
这里写目录标题
1.准备
首先是安装海康威视的MVS软件,VMware虚拟机中Ubuntu16.04系统下通过MVS运行海康威视工业相机。
1.1 相关资料
- 工业相机SDK(C)开发指南
这是最重要的资料,里面有(环境配置:SDK编程环境配置,包括网络配置、驱动安装等)、(编程导引:相机连接流程和取图方式介绍)、相机的常用节点等等。
- 相机的常用节点查询
这部分主要是用于SDK提供API接口中的参数设置,如设置曝光模式、曝光值、增益模式、增益值、外触发等等。
根据我实际开发过程中常用的相机节点值如下:
- CameraParams.h:包含编程需要的所有结构体、宏定义和枚举量
- MvCameraControl.h:包含所有控制相机的API接口
- 相关示例程序:
1.2 Debug常备
如果遇到问题,比如相机未正常打开、相机无法取图等等,及时打印每次调用SDK接口返回的输出值,对照错误码定义去排查问题(记得将输出值转化为十六进制)事半功倍。
如果函数正常完成而没有检测到任何错误,则返回值为MV_OK,否则返回错误码 。
2.通过海康相机SDK熟悉C接口取图流程和取图方式
个人总结:句柄(void *handle)是相机开发中重要的一环,SDK中的接口中,大部分都是针对句柄的操作,如果有多个相机,要将每个相机和其对应的句柄关联好,防止后期使用的过程中未及时释放句柄、造成混乱等。
2.1 设备连接接口流程
对设备进行操作,实现图像采集、参数配置等功能,需要先连接设备(打开设备),具体流程如下图所示:
1.调用 MV_CC_EnumDevices() 枚举子网内指定传输协议对应的所有设备。可以通过 pstDevList 在结构 MV_CC_DEVICE_INFO_LIST 中找到设备的信息。
#include "MvCameraControl.h"
void main()
{
unsigned int nTLayerType = MV_GIGE_DEVICE | MV_USB_DEVICE;
MV_CC_DEVICE_INFO_LIST m_stDevList = {0};
int nRet = MV_CC_EnumDevices(nTLayerType, &m_stDevList);
if (MV_OK != nRet)
{
printf("error: EnumDevices fail [%x]
", nRet);
}
}
关于搜索到的所有相机设备信息在 MV_CC_DEVICE_INFO_LIST结构体中,
/// ~chinese 设备信息列表 ~english Device Information List
typedef struct _MV_CC_DEVICE_INFO_LIST_
{
unsigned int nDeviceNum; ///< [OUT] ~chinese 在线设备数量 ~english Online Device Number
MV_CC_DEVICE_INFO* pDeviceInfo[MV_MAX_DEVICE_NUM]; ///&l