C#海康相机SDK二次开发
第一种:使用海康提供的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对象对应一个相机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)