C# MG.CamCtrl 工业相机库(开源) 海康 大恒

C# MG.CamCtrl 相机库(开源) 海康 大恒

介绍

c# 相机库,含海康、大恒品牌2D相机的常用功能。

底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率。

开源地址:(整理后贴出)
功能持续完善中。。。

工厂模式创建实例

csharp 复制代码
ICamera myCamera;
myCamera= CamFactory.CreatCamera(CameraBrand.HIK);//CameraBrand.DaHeng

选取对应SN号的相机,初始化

csharp 复制代码
 //获取相机枚举
var devicelist = myCamera.GetListEnum();
//or
//var devicelist = CamFactory.GetDeviceEnum(CameraBrand.HIK); 

//选对应SN,初始化相机 
myCamera.InitDevice(devicelist.First());

启动相机

启动相机有以下几种方式:

  • 常规硬触发
  • 常规软触发
  • 硬触发 + 回调
  • 软触发 + 回调
csharp 复制代码
 //硬触发模式  启动相机
myCamera.StartWith_HardTriggerModel(HardTriggerModel.Line0); 

//软触发模式  启动相机
//myCamera.StartWith_SoftTriggerModel(); 

//硬触发 + 回调模式  启动相机
// myCamera.StartWith_HardTriggerModel_SetCallback(HardTriggerModel.Line0, CameraCallBack); 

//软触发 + 回调模式  启动相机
//myCamera.StartWith_SoftTriggerModel_SetCallback(CameraCallBack); 

回调函数:

csharp 复制代码
/// <summary>
/// 回调函数
/// </summary>
/// <param name="bmp"></param>
private void CameraCallBack(Bitmap bmp)
{

	//执行取图后的操作
	bmp.Save("./test.bmp");
}

取图

csharp 复制代码
//等待硬触发 获取图片, 设定超时: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");
}

注销相机

csharp 复制代码
//注销当前实例
myCamera.CloseDevice();
or
//CamFactory.DestroyCamera(newcamera);
or
//CamFactory.DestroyAll();   
 

参数设置/获取

含常用参数设置和获取

如曝光值、延时、硬触发方式等

详细见接口小节

接口

csharp 复制代码
namespace MG.CamCtrl
{
    public interface ICamera : IDisposable
    {

        #region  operate
        /// <summary>
        /// 获取相机SN枚举
        /// </summary>
        /// <returns></returns>
        List<string> GetListEnum();

        /// <summary>
        /// 初始化相机
        /// </summary>
        /// <param name="CamSN"></param>
        /// <returns></returns>
        bool InitDevice(string CamSN);

        /// <summary>
        /// 注销相机
        /// </summary>
        void CloseDevice();

        /// <summary>
        /// 回调 + 循环采图 启动相机
        /// </summary>
        /// <param name="callbackfunc"></param>
        /// <returns></returns>
        bool StartWith_Continue_SetCallback(Action<Bitmap> callbackfunc);

        /// <summary>
        /// 软触发模式 启动相机
        /// </summary>
        /// <returns></returns>
        bool StartWith_SoftTriggerModel();

        /// <summary>
        /// 硬触发模式 启动相机
        /// </summary>
        /// <param name="hardtriggeritem"></param>
        /// <returns></returns>
        bool StartWith_HardTriggerModel(TriggerSource hardtriggeritem);

        /// <summary>
        /// 硬触发 + 回调 启动相机
        /// </summary>
        /// <param name="hardtriggeritem"></param>
        /// <param name="callbackfunc"></param>
        /// <returns></returns>
        bool StartWith_HardTriggerModel_SetCallback(TriggerSource hardtriggeritem, Action<Bitmap> callbackfunc);

        /// <summary>
        /// 软触发 + 回调 启动相机
        /// </summary>
        /// <param name="callbackfunc"></param>
        /// <returns></returns>
        bool StartWith_SoftTriggerModel_SetCallback(Action<Bitmap> callbackfunc);

        /// <summary>
        /// 等待硬触发获取图像
        /// </summary>
        /// <param name="bitmap"></param>
        /// <param name="outtime"></param>
        /// <returns></returns>
        bool GetImage(out Bitmap bitmap, int outtime = 3000);

        /// <summary>
        /// 软触发获取图像
        /// </summary>
        /// <param name="bitmap"></param>
        /// <param name="outtime"></param>
        /// <returns></returns>
        bool GetImageWithSoftTrigger(out Bitmap bitmap, int outtime = 3000);

        /// <summary>
        /// 软触发
        /// </summary>
        /// <returns></returns>
        bool SoftTrigger();

        #endregion


        #region SettingConfig
        /// <summary>
        /// 设置相机参数
        /// </summary>
        /// <param name="config"></param>
        void SetCamConfig(CamConfig config);
        /// <summary>
        /// 获取相机参数
        /// </summary>
        /// <param name="config"></param>
        void GetCamConfig(out CamConfig config);

        /// <summary>
        /// 设置触发模式及触发源
        /// </summary>
        /// <param name="mode"></param>
        /// <param name="triggerEnum"></param>
        /// <returns></returns>
        bool SetTriggerMode(TriggerMode mode, TriggerSource triggerEnum = TriggerSource.Line0);

        /// <summary>
        /// 获取触发模式及触发源
        /// </summary>
        /// <param name="mode"></param>
        /// <param name="hardTriggerModel"></param>
        /// <returns></returns>
        bool GetTriggerMode(out TriggerMode mode, out TriggerSource hardTriggerModel);

        /// <summary>
        /// 设置曝光时长
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        bool SetExpouseTime(ushort value);

        /// <summary>
        /// 获取曝光时长
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        bool GetExpouseTime(out ushort value);

        /// <summary>
        /// 设置硬触发极性
        /// </summary>
        /// <param name="polarity"></param>
        /// <returns></returns>
        bool SetTriggerPolarity(TriggerPolarity polarity);

        /// <summary>
        /// 获取硬触发极性
        /// </summary>
        /// <param name="polarity"></param>
        /// <returns></returns>
        bool GetTriggerPolarity(out TriggerPolarity polarity);

        /// <summary>
        /// 设置触发滤波时间 (us)
        /// </summary>
        /// <param name="flitertime"></param>
        /// <returns></returns>
        bool SetTriggerFliter(ushort flitertime);

        /// <summary>
        /// 获取触发滤波时间 (us)
        /// </summary>
        /// <param name="flitertime"></param>
        /// <returns></returns>
        bool GetTriggerFliter(out ushort flitertime);

        /// <summary>
        /// 设置触发延时
        /// </summary>
        /// <param name="delay"></param>
        /// <returns></returns>
        bool SetTriggerDelay(ushort delay);

        /// <summary>
        /// 获取触发延时
        /// </summary>
        /// <param name="delay"></param>
        /// <returns></returns>
        bool GetTriggerDelay(out ushort delay);

        /// <summary>
        /// 设置增益
        /// </summary>
        /// <param name="gain"></param>
        /// <returns></returns>
        bool SetGain(short gain);

        /// <summary>
        /// 获取增益值
        /// </summary>
        /// <param name="gain"></param>
        /// <returns></returns>
        bool GetGain(out short gain);

        /// <summary>
        /// 设置信号线模式
        /// </summary>
        /// <param name="line"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        bool SetLineMode(IOLines line, LineMode mode);

        /// <summary>
        /// 设置信号线电平状态
        /// </summary>
        /// <param name="line"></param>
        /// <param name="linestatus"></param>
        /// <returns></returns>
        bool SetLineStatus(IOLines line, LineStatus linestatus);

        /// <summary>
        /// 获取信号线电平状态
        /// </summary>
        /// <param name="line"></param>
        /// <param name="lineStatus"></param>
        /// <returns></returns>
        bool GetLineStatus(IOLines line, out LineStatus lineStatus);

        /// <summary>
        /// 自动白平衡
        /// </summary>
        /// <returns></returns>
        bool AutoBalanceWhite();

        #endregion

    }
}
相关推荐
DolphinScheduler社区32 分钟前
Apache DolphinScheduler 新增 gRPC 任务插件 | 开源之夏成果总结
大数据·开源·apache·海豚调度
AI科技星33 分钟前
宇宙膨胀速度的光速极限:基于张祥前统一场论的第一性原理推导与观测验证
数据结构·人工智能·经验分享·python·算法·计算机视觉
ajassi200043 分钟前
开源 Objective-C IOS 应用开发(四)Xcode工程文件结构
ios·开源·objective-c
小码编匠1 小时前
.NET 10 性能突破:持续优化才是质变关键
后端·c#·.net
CoovallyAIHub2 小时前
让Qwen-VL的检测能力像YOLO一样强,VLM-FO1如何打通大模型的视觉任督二脉
深度学习·算法·计算机视觉
说私域2 小时前
开源链动2+1模式AI智能名片S2B2C商城小程序的价值及持续变现能力分析
人工智能·小程序·开源
CoovallyAIHub2 小时前
突破跨模态识别瓶颈!火箭军工程大学提出MFENet:让AI在白天黑夜都能准确识人
深度学习·算法·计算机视觉
CoovallyAIHub3 小时前
TypeScript超越Python,以66%增速跃升第一,Python稳居AI领域王座
深度学习·算法·计算机视觉
q***2513 小时前
开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)
开源·交互·fastapi