C# MG.CamCtrl 工业相机库
- 介绍
- 一、使用案例
- 二、使用介绍
- 1、工厂模式创建实例
- 2、枚举设备,初始化
- 3、启动相机
- 4、取图
- 5、注销相机
- 三、接口
- 1、相机操作
- 2、启动方式
- 3、取图
- 4、设置/获取参数
介绍
c# 相机库,含海康、大恒品牌2D相机的常用功能。
底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率。
开源地址:https://gitee.com/laomaogu/mgcamctrl
现只兼容了大恒和海康,都是常用的
其他相机,看我老板啥时候换品牌吧,或者换老板?
当然如果小伙伴感兴趣,可以在这个框架下直接添加
一、使用案例
Sample路径下放了案例
二、使用介绍
注意:
一定要设置为 x64 编译平台
1、工厂模式创建实例
ICamera myCamera;
myCamera= CamFactory.CreatCamera(CameraBrand.HIK);//CameraBrand.DaHeng
2、枚举设备,初始化
选取对应SN号的相机,初始化相机
调试的时候,经常直接中断程序
程序Kill了,但相机还未注销。。。。。。
导致每次中断重启都连不上相机,要重新断电才行
所以在初始化的时候都加了心跳(仅支持网口),
断连超1000ms后,相机就自动注销,
下次能直接连接相机啦!
中断算个diao,哈哈哈哈
//获取相机枚举
var devicelist = myCamera.GetListEnum();
//or
//var devicelist = CamFactory.GetDeviceEnum(CameraBrand.HIK); //选对应SN,初始化相机
myCamera.InitDevice(devicelist.First());
3、启动相机
启动相机有以下几种方式:
- 常规硬触发
- 常规软触发
- 硬触发 + 回调
- 软触发 + 回调
//硬触发模式 启动相机
myCamera.StartWith_HardTriggerModel(HardTriggerModel.Line0); //软触发模式 启动相机
//myCamera.StartWith_SoftTriggerModel(); //硬触发 + 回调模式 启动相机
// myCamera.StartWith_HardTriggerModel_SetCallback(HardTriggerModel.Line0, CameraCallBack); //软触发 + 回调模式 启动相机
//myCamera.StartWith_SoftTriggerModel_SetCallback(CameraCallBack);
回调函数:
/// <summary>
/// 回调函数
/// </summary>
/// <param name="bmp"></param>
private void CameraCallBack(Bitmap bmp)
{//执行取图后的操作bmp.Save("./test.bmp");
}
4、取图
为了能兼容其他视觉平台,图像格式为Bitmap
这样无论是OpenCV Halcon VisionPro 都可任意转换想要的格式
//等待硬触发 获取图片, 设定超时:5000ms
myCamera.GetImage(out Bitmap CaptureImage,5000);
//or 使用默认超时时间
//myCamera.GetImage(out Bitmap CaptureImage);//软触发获取图像
//myCamera.GetImageWithSoftTrigger(out Bitmap CaptureImage);/// <summary>
/// 回调函数
/// </summary>
/// <param name="bmp"></param>
private void CameraCallBack(Bitmap bmp)
{//执行取图后的操作bmp.Save("./test.bmp");
}
5、注销相机
//注销当前实例
myCamera.CloseDevice();
or
//CamFactory.DestroyCamera(myCamera);
or
//CamFactory.DestroyAll();
三、接口
1、相机操作
接口 | 描述 |
---|---|
List < string > GetListEnum() | 获取相机SN枚举 |
bool InitDevice(string CamSN) | 初始化相机 |
void CloseDevice() | 注销相机 |
2、启动方式
接口 | 描述 |
---|---|
bool StartWith_Continue_SetCallback(Action callbackfunc) | 回调 + 循环采图 启动相机 |
bool StartWith_SoftTriggerModel() | 软触发模式 启动相机 |
bool StartWith_HardTriggerModel(TriggerSource hardtriggeritem) | 硬触发模式 启动相机 |
bool StartWith_HardTriggerModel_SetCallback(TriggerSource hardtriggeritem, Action callbackfunc) | 硬触发 + 回调 启动相机 |
bool StartWith_SoftTriggerModel_SetCallback(Action 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() | 自动白平衡 |