C#海康相机SDK二次开发

发布时间 2023-08-05 01:09:48作者: JIAXUN
两种方式:

                    第一种:使用海康提供的MyCamera.cs类,使用动态链接库的方式,这种方式必须安装MVS客户端(客户端安装的时候会将需要用到的依赖文件一并安装,如果不想安装MVS,就必须到海康官网下载“机器视觉工业相机SDK V3.5.0版本Runtime组件包”),并使用MyCamera.cs这个类
                    第二种:使用MvCamCtrl.Net.dll.

这里只记录第一种方式:

大致流程(官方实例MultipleDemo):

1、枚举相机

  MyCamera.MV_CC_EnumDevices_NET 

  返回值MV_CC_DEVICE_INFO_LIST(里面包含设备数量、设备信息数组IntPtr类型),

  通过Marshal.PtrToStructure将IntPtr转struct,得到MV_CC_DEVICE_INFO device 

  打开设备需要用到device 

2、打开设备(创建句柄、打开相机、设置触发模式、注册回调函数)

  先实例化MyCamera myCamera = new MyCamera(),有几个相机就实例化几个MyCamera 对象(一个MyCamera对应一个相机,device 一样的道理)

  后面针对相机的所有操作都使用MyCamera这个对象

   创建句柄:myCamera.MV_CC_CreateDevice_NET(ref device),参数为枚举得到的并转换后的结构体device

   打开相机:myCamera.MV_CC_OpenDevice_NET()

   设置为触发模式: myCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);

   注册回调函数:myCamera.MV_CC_RegisterImageCallBackEx_NET(cbImage, (IntPtr)i)       (IntPtr)i为用户自定义变量,用于匹配回调函数,官方实例中i传的是myCamera在数组的中的索引

3、开始取流

    myCamera.MV_CC_StartGrabbing_NET()

4、停止取流

  myCameras.MV_CC_StopGrabbing_NET()

5、关闭设备

  myCameras.MV_CC_CloseDevice_NET()

触发模式分为三种:

连续触发: myCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF) 

软触发:myCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON) 

硬触发: myCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);

    硬触发可以选择线路LINE0 、LINE1。。。。。。。。。。

执行一次软触发:myCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");

6、回调函数(官方实例直接拿来用):

由SDK内部调用,当内部接收到取图指令会自动调用回调函数

可以在回调函数中写对图片后续处理的代码。比如转MAT对象,然后用OPENCV处理

//转MAT对象代码:

Mat image = new Mat(stDisplayInfo.nHeight, stDisplayInfo.nWidth, MatType.CV_8UC1, stDisplayInfo.pData)

 

总结:最重要的两个东西 1、device用于创建相机句柄    2、MyCamera对象用于执行相机后面的所有操作 ,多相机情况下一个MyCamera对象对应一个相机