设为首页收藏本站
授权版本:2024_07
开启左侧

[相机] C# 开源SDK 工业相机库 调用海康相机 大恒相机

[复制链接]
老毛鸪 发表于 2024-4-23 18:22:33 | 显示全部楼层 |阅读模式
介绍
c# 相机库
含海康、大恒品牌2D相机的常用功能
底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率

开源地址(https://gitee.com/laomaogu/mgcamctrl]https://gitee.com/laomaogu/mgcamctrl](https://gitee.com/laomaogu/mgcamctrl
一、使用案例
Sample路径下放了案例

picture.png

二、使用介绍
注意:   一定要设置为 x64 编译平台


1、工厂模式创建实例
  1. ICamera myCamera;
  2. myCamera= CamFactory.CreatCamera(CameraBrand.HIK);//CameraBrand.DaHeng
复制代码

2、枚举设备,初始化
调试的时候,经常直接中断程序
程序Kill了,但相机还未注销。。。。。。
导致每次中断重启都连不上相机,要重新断电才行
所以在初始化的时候都加了心跳(仅支持网口),
断连超1000ms后,相机就自动注销,
下次能直接连接相机!
  1. //获取相机枚举
  2. var devicelist = myCamera.GetListEnum();
  3. //or
  4. //var devicelist = CamFactory.GetDeviceEnum(CameraBrand.HIK);

  5. //选对应SN,初始化相机
  6. myCamera.InitDevice(devicelist.First());
复制代码

3、启动相机
启动相机有以下几种方式:
  • 常规硬触发
  • 常规软触发
  • 硬触发+回调
  • 软触发+回调
  1. //硬触发模式  启动相机
  2. myCamera.StartWith_HardTriggerModel(HardTriggerModel.Line0);
  3. //软触发模式  启动相机
  4. //myCamera.StartWith_SoftTriggerModel();
  5. //硬触发 + 回调模式  启动相机
  6. // myCamera.StartWith_HardTriggerModel_SetCallback(HardTriggerModel.Line0, CameraCallBack);
  7. //软触发 + 回调模式  启动相机
  8. //myCamera.StartWith_SoftTriggerModel_SetCallback(CameraCallBack);
复制代码

回调函数:
  1. <p><font face="微软雅黑">/// <summary></font></p><p><font face="微软雅黑">/// 回调函数</font></p><p><font face="微软雅黑">/// </summary></font></p><p><font face="微软雅黑">/// <param name="bmp"></param></font></p><p><font face="微软雅黑">private void CameraCallBack(Bitmap bmp)</font></p><p><font face="微软雅黑">{</font></p><p><font face="微软雅黑"><span style="white-space: pre;">        </span>//执行取图后的操作</font></p><p><font face="微软雅黑"><span style="white-space: pre;">        </span>bmp.Save("./test.bmp");</font></p><p><font face="微软雅黑">}</font></p>
复制代码

4、取图
为了能兼容其他视觉平台,图像格式为Bitmap  
这样无论是OpenCV Halcon VisionPro 都可任意转换想要的格式
  1. //等待硬触发 获取图片, 设定超时:5000ms
  2. myCamera.GetImage(out Bitmap CaptureImage,5000);
  3. //or 使用默认超时时间
  4. //myCamera.GetImage(out Bitmap CaptureImage);

  5. //软触发获取图像
  6. //myCamera.GetImageWithSoftTrigger(out Bitmap CaptureImage);

  7. /// <summary>
  8. /// 回调函数
  9. /// </summary>
  10. /// <param name="bmp"></param>
  11. private void CameraCallBack(Bitmap bmp)
  12. {
  13.         //执行取图后的操作
  14.         bmp.Save("./test.bmp");
  15. }
复制代码

5、注销相机
  1. //注销当前实例
  2. myCamera.CloseDevice();
  3. //or
  4. //CamFactory.DestroyCamera(myCamera);
  5. //or
  6. //CamFactory.DestroyAll();   
复制代码

三、接口

1、相机操作
接口 描述
List < string  > GetListEnum() 获取相机SN枚举
bool InitDevice(string CamSN) 初始化相机
void CloseDevice() 注销相机

2、启动方式
接口 描述  
bool StartWith_Continue_SetCallback
(Action<Bitmap> callbackfunc)
回调 + 循环采图 启动相机
bool StartWith_SoftTriggerModel() 软触发模式 启动相机
bool StartWith_HardTriggerModel
(TriggerSource hardtriggeritem)
硬触发模式 启动相机
bool StartWith_HardTriggerModel_SetCallback
(TriggerSource hardtriggeritem, Action<Bitmap> callbackfunc)
硬触发 + 回调 启动相机
bool StartWith_SoftTriggerModel_SetCallback
(Action<Bitmap> callbackfunc)
软触发 + 回调 启动相机

3、取图
接口
bool GetImage(out Bitmap bitmap, int outtime = 3000) 等待硬触发获取图像
bool GetImageWithSoftTrigger
(out Bitmap bitmap, int outtime = 3000)
软触发获取图像
bool SoftTrigger() 软触发
回调取图(详情见案例)

4、设置/获取参数
接口
void SetCamConfig(CamConfig config) 设置相机参数
void GetCamConfig(out CamConfig config) 获取相机参数
bool SetTriggerMode(TriggerMode mode,
TriggerSource triggerEnum = TriggerSource.Line0)
设置触发模式及触发源
bool GetTriggerMode(out TriggerMode mode,
out TriggerSource hardTriggerModel)
获取触发模式及触发源
bool SetExpouseTime(ushort value) 设置曝光时长
bool GetExpouseTime(out ushort value) 获取曝光时长
bool SetTriggerPolarity(TriggerPolarity polarity) 设置硬触发极性
bool GetTriggerPolarity(out TriggerPolarity polarity) 获取硬触发极性
bool SetTriggerFliter(ushort flitertime) 设置触发滤波时间 (us)
bool GetTriggerFliter(out ushort flitertime) 获取触发滤波时间 (us)
bool SetTriggerDelay(ushort delay) 设置触发延时
bool GetTriggerDelay(out ushort delay) 获取触发延时
bool SetGain(short gain) 设置增益
bool GetGain(out short gain) 获取增益值
bool SetLineMode(IOLines line, LineMode mode) 设置信号线电平状态
bool SetLineStatus(IOLines line, LineStatus linestatus) 获取信号线电平状态
bool GetLineStatus(IOLines line, out LineStatus lineStatus)
获取信号线电平状态
bool AutoBalanceWhite() 自动白平衡


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
wenbo_bob 发表于 2024-4-24 16:16:44 | 显示全部楼层
学习一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表