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

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

    • 介绍
      • 工厂模式创建实例
      • 选取对应SN号的相机,初始化
      • 启动相机
      • 取图
      • 注销相机
      • 参数设置/获取
      • 接口

介绍

c# 相机库,含海康、大恒品牌2D相机的常用功能。
底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率。

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

工厂模式创建实例

ICamera myCamera;
myCamera= CamFactory.CreatCamera(CameraBrand.HIK);//CameraBrand.DaHeng

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

 //获取相机枚举
var devicelist = myCamera.GetListEnum();
//or
//var devicelist = CamFactory.GetDeviceEnum(CameraBrand.HIK); //选对应SN,初始化相机 
myCamera.InitDevice(devicelist.First());

启动相机

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

  • 常规硬触发
  • 常规软触发
  • 硬触发 + 回调
  • 软触发 + 回调
 //硬触发模式  启动相机
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");
}

取图

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

注销相机

//注销当前实例
myCamera.CloseDevice();
or
//CamFactory.DestroyCamera(newcamera);
or
//CamFactory.DestroyAll();   

参数设置/获取

含常用参数设置和获取
如曝光值、延时、硬触发方式等
详细见接口小节

接口

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}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 基础知识 套接字 编程

在网络中通过IP地址来标识和区别不同的主机&#xff0c;通过端口号来标识和区分一台主机中的不同应用进程&#xff0c;端口号拼接到IP地址&#xff0c;即构成了套接字&#xff08;Socket&#xff09;。在网络中采用发送方和接收方的套接字来识别断电。套接字&#xff0c;实际上…

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹前言第1章 添加文件夹第2章 添加文件路径2.1 相对路径方法2.2 绝对路径方法 总结 前言 在编程的过程中&#xff0c;如果需要在原有的工程基础上新增其它的…

SQLite表添加主键

CREATE TABLE [user]([user_name] VARCHAR(128) NOT NULL, [address] VARCHAR(128) NOT NULL, [mobile] VARCHAR(15) NOT NULL, [user_id] INTEGER NOT NULL,CONSTRAINT pk PRIMARY KEY (user_id));CONSTRAINT pk PRIMARY KEY (user_id) pk是键名&#xff08;添入你想填的名称&…

哈希表|202.快乐数

力扣题目链接 int getSum(int n) {int sum 0;while (n) {sum (n % 10) * (n % 10);n / 10;}return sum; }bool isHappy(int n){int sum getSum(n);int hash[820] {0};while (sum ! 1) {if (hash[sum] 1) {return false;} else {hash[sum];}sum getSum(sum);}return true…

关于做副业、做自媒体:说几句扎心的话

今天在某乎看到一个问题&#xff1a;想尝试自媒体&#xff0c;想了一个月了&#xff0c;都没想好怎么起步&#xff0c;咋整呀&#xff1f; 恰好昨天陪退休老妈去探店&#xff0c;有感而发&#xff0c;就来唠一唠。 一、退休老妈的副业经历 老妈去年年初开始&#xff0c;在某…

探索未来:2024年人工智慧驱动的 AI + 研发趋势

#2024 AI 辅助研发趋势# 当我们站在2024年的风口浪尖时&#xff0c;人工智慧辅助研发的格局即将发生翻天覆地的变化。2023年人工智慧的快速发展为各行业的突破性进步铺平了道路。从研发流程的数位转型&#xff0c;到 AI 开发工具2.0 的出现&#xff0c;未来充满了超越 Copilot…

C++中的内部类

一、内部类的概念 如果一个类定义在另一个类的内部&#xff0c;那么这个类就叫做内部类。&#xff08;内部类其实和一个独立的类没有区别&#xff0c;只是它会受到外部类访问限定符以及类域的限制&#xff0c;且是外部类的友元&#xff09; 如果B类是A类的内部类&#xff0c;…

基于数组的顺序表删除操作

删除算法需要注意&#xff1a; 1. 列表长度为0时不能再删除 2.每次删除后长度减一 3.输入删除的数据在原来列表中不存在&#xff0c;不需要改变原列表 #include <iostream> #define MAX 100; using namespace std;int search(int arr[],int len,int n) {for(int i0; i…

【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现

【2024泰迪杯】A 题&#xff1a;生产线的故障自动识别与人员配置 Python代码实现 1 问题 一、问题背景 随着新兴信息技术的大规模应用&#xff0c;工业生产线的智能化控制技术日益成熟。自动生产线 可以自动完成物品传送、物料填装、产品包装和质量检测等过程&#xff0c;极…

LeetCode - 寻找数组的中心

先学习一下前缀和吧 LCR 012.寻找数组的中心LCR 012. 代码解析 在读题读到左侧元素之和等于右侧所有元素之和的时候&#xff0c;我觉得可以用前缀和&#xff0c;然后结合下面的示例&#xff0c;模拟了一下发现确实可以。 我的想法是搞两个数组&#xff0c;一个来存从左到右数…

微信小程序(五十六)逆地址解析示范

注释很详细&#xff0c;直接上代码 温馨提醒&#xff1a;记得给自己的key配额&#xff0c;基础操作与前提配置参考本专栏第五十四篇 新增内容&#xff1a; 1.逆地址解析基础示范 2.开放经纬度参数 3.只列举修改的js部分&#xff0c;前提配置请看 温馨提醒 源码&#xff1a; ind…

软件开发人员从0到1实现物联网项目:需求分析

文章目录 前言市场调研线下考察竞品参考 项目目标功能需求用户端功能需求商家功能需求系统管理功能需求 非功能需求性能安全性易用性扩展性可靠性 小结 前言 上文对实现自助棋牌室项目涉及到的技术做了调研&#xff0c;尤其是物联网技术。那接下来就是对需求进行一番分析了&am…

力扣 239. 滑动窗口最大值

题目链接 chatgpt写的代码&#xff0c; 首先这是个滑动窗口的问题&#xff0c;要用单调队列来解决&#xff0c;这个就是毋庸置疑的&#xff0c;就直接接受就行了 其次&#xff0c;不知道单调队列是啥&#xff0c;知道单调队列是啥了&#xff0c;又不知道单调队列该如何实现&…

王道机试C++第 5 章 数据结构二:队列queue和21年蓝桥杯省赛选择题Day32

目录 5.2 队列 1&#xff0e;STL-queue 课上演示&#xff1a; 基本代码展示&#xff1a; 2. 队列的应用 例:约瑟夫问题 No. 2 题目描述&#xff1a; 思路提示&#xff1a; 代码展示&#xff1a; 例&#xff1a;猫狗收容所 题目描述&#xff1a; 代码表示&#xff1…

蓝桥杯-List集合

目录 List集合实例化 List集合实例化步骤 常用方法 ArrayList方法 1&#xff1a;add(Object element) 2&#xff1a;size() 3&#xff1a;get(int index) 4&#xff1a;isEmpty() 5:contains(Object o) 6&#xff1a;remove(int index) 总结ArrayList list集合的特点…

Web服务器需要警惕的一些安全隐患

Web服务器需要警惕的一些安全隐患有哪些&#xff0c;今天德迅云安全就带您来了解下。熟悉了解了就知道怎么规避风险。不过无论是什么漏洞&#xff0c;都体现着安全是一个整体的真理&#xff0c;考虑Web服务器的安全性&#xff0c;必须要考虑到与之相配合的操作系统。 1.物理路径…

应用方案 | DCDC电源管理芯片MC34063A

DCDC电源管理芯片 MC34063A MC34063A 为一单片 DC-DC 变换集成电路&#xff0c;内含温度补偿的参考电压源&#xff08;1.25V&#xff09;、比较器、能有效限制电流及控制工作周期的振荡器&#xff0c;驱动器及大电流输出开关管等。外配少量元件&#xff0c;就能组成升压、…

Redis缓存、缓存穿透、缓存雪崩、缓存击穿

1.认识Redis缓存 先来认识一下缓存&#xff0c;再了解redis用作缓存时的作用和问题&#xff0c;以及如何解决redis缓存在的问题。 1.1.什么是缓存 1.2.缓存的优缺点(作用和成本) 2.redis缓存的作用 正常客户端请求服务器&#xff0c;服务器会直接访问数据库&#xff0c;这有…

Selenium自动化测试细节讲解

与以前瀑布式开发模式不同&#xff0c;现在软件测试人员具有使用自动化工具执行测试用例套件的优势&#xff0c;而以前&#xff0c;测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试&#xff0c;而是最大程度地减少手动运行的测试。自动化…

R语言系列2——R语言数据处理技巧

目录 写在开头1. 数据导入与导出1.1 基础操作详解1.1.1 导入数据1.1.2 导出数据 1.2 高级技巧详解1.2.1 自定义导入1.2.2 自定义导出 1.3 常见问题 2. 数据清洗基础2.1 缺失值处理2.1.1 删除含缺失值的行或列2.1.2 填充缺失值2.1.3 预测模型填充2.1.4 使用特定值填充 2.2 数据类…