当前位置: 首页 > news >正文

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

相关文章:

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

C# MG.CamCtrl 相机库&#xff08;开源&#xff09; 海康 大恒 介绍工厂模式创建实例选取对应SN号的相机&#xff0c;初始化启动相机取图注销相机参数设置/获取接口 介绍 c# 相机库&#xff0c;含海康、大恒品牌2D相机的常用功能。 底层采用回调信号量模式封装 &#xff0c;最…...

【Redis】redis的基本使用

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Redis ⛺️稳中求进&#xff0c;晒太阳 Redis的概述 为什么要有redis? redis是数据库&#xff0c;mysql也是数据库&#xff0c;redis做缓存的意义就是为了减轻数据库压力 数据库为什么…...

植物病害识别:YOLO水稻病害识别数据集(3000多张,3个类别,yolo标注)

YOLO水稻病害识别数据集&#xff0c;包含细菌性枯萎病&#xff0c;水稻瘟疫&#xff0c;褐斑病3个常见病害类别&#xff0c;共3000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或…...

Java实现Tron(波场)区块链的开发实践(三)波场链水龙头、WEB3测试实战

上一节我们具体讲到Java实现Tron波场链的逻辑代码实现。 这一节我们通过部署和开发好的代码&#xff0c;针对测试链进行自测开发&#xff0c;准备测试环境。 1. 创建离线地址 首先我们需要一个离线地址&#xff0c;我们不需要在线进行创建&#xff0c;直接可以通过第一节的离…...

010-$nextTick

$nextTick 1、问题2、$nextTick3、应用场景 1、问题 Vue 实现响应式&#xff0c;在 data 更新后&#xff0c;一定时间内&#xff0c;没有继续操作DOM&#xff0c;然后会触发浏览器渲染引擎去更新DOM&#xff0c;更新DOM也是需要时间的&#xff0c;所以 data 更新引起的 DOM更新…...

[IAGC] Kafka消费者组的负载均衡策略

在Apache Kafka中&#xff0c;负载均衡是通过将主题的每个分区分配给消费者组中的一个消费者来实现的。Kafka的负载均衡算法会尽可能平均地将分区分配给每个消费者。 文章目录 分配策略Kafka的重新平衡扩展性参考资源 分配策略 在Kafka中&#xff0c;有两种内置的分区分配策略…...

2024年会声会影 迎接来了七大新功能

我喜欢Corel VideoStudio 会声会影2024旗舰版&#xff0c;因为它使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。VideoStudio让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触及它的表面&#xff0c;我可以做大量的编辑…...

AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎等(老子云三维模型可视化优化服务平台)

老子云概述 老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 基于 H…...

JMM(Java Memory Model)内存模型

Java内存模型&#xff0c;规范了计算机内存与java虚拟机之间的协调工作&#xff0c;即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程对变量的…...

.NET 简介:跨平台、开源、高性能的开发平台

.NET 简介 .NET 是微软开发的一个免费、开源、跨平台的开发人员平台&#xff0c;用于构建各种类型的应用程序。它可以运行使用多种语言编写的程序&#xff0c;其中 C# 是最常用的语言。.NET 依赖于许多大规模应用在生产中使用的高性能运行时。 .NET 平台具有以下特点&#xf…...

m序列生成器

function [m] mserial_generator(tap_set) % m序列产生器 % 输出为m序列&#xff0c;未进行极性变换。 L 2^(length(tap_set)-1)-1; x [zeros(1,(length(tap_set)-2)) 1]; for i 1:1:Lm(i)x(end);for j 1:1:length(tap_set)-1sum_vector(j)tap_set(j1)*x(j);endsum_x mod…...

go的数据类型看这一篇就够了

目录 一:类型分类 二:介绍 一:类型分类 go的数据类型包含11种,可以分为以下四类。 1:基础类型:布尔,数字和字符串: 2:复合类型:数组和结构体 3:引用类型: 指针,channel通道,切片,map字典,函数 4:接口类型 二:介绍 1:布尔 一个布尔类型的值只有两种:tr…...

【机器学习300问】28、什么是决策树?

〇、两个预测任务 &#xff08;1&#xff09;任务一&#xff1a;银行预测偿还能力 当前&#xff0c;某银行正致力于发掘潜在的放贷用户。他们掌握了每位用户的三个关键特征&#xff1a;房产状况、婚姻状况以及年收入。此外&#xff0c;银行还拥有过往这些用户的债务偿还能力的…...

嵌入式学习33-网络通信

网络: 数据传输,数据共享 1.网络协议模型: OSI协议模型 7 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&…...

FFmepg--内存IO模式

功能&#xff1a; 内存IO模式&#xff1a;avio_alloc_context(): 自定义读写文件方式&#xff0c;打开文件 api // 自定义IO AVIOContext * avio_alloc_context (unsigend char * buffer;int buffer_size;void *opaque;int (*read_packet)(void * opaque, uint8_t * buf,in…...

Android AMS

Android进阶&#xff1a;一口气读完《Android进阶解密》 - 掘金 Android AMS&#xff08;Activity Manager Service&#xff09;实现的功能 **管理应用程序的生命周期&#xff1a;**启动、停止、暂停、恢复和销毁应用程序。 **控制应用程序的启动顺序&#xff1a;**确保应用程…...

2024暑期实习八股笔记

文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log&#xff08;重做日志&#xff09;刷盘时机日志文件组 bin log&#xff08;归档日志&#xff09;记录格式写入机制 两阶段提交undo log&…...

EDGE 音乐生成的可编辑舞蹈 论文学习笔记

本文不是很严谨&#xff0c;供学习参考&#xff0c;随时更新 EDGE: Editable Dance Generation From Music 音乐生成的可编辑舞蹈 GitHub - Stanford-TML/EDGE: Official PyTorch Implementation of EDGE (CVPR 2023) 1. 我们引入了一种基于扩散的舞蹈生成方法&#xff0c;该…...

laravel 模型多对多,应用

laravel 模型多对多&#xff0c;应用&#xff0c;试卷 跟 区域 多对多关系 一个试卷可以发放到a b c 区域 创建试卷表 CREATE TABLE exams (exam_id int(11) unsigned NOT NULL AUTO_INCREMENT,exam_title varchar(100) NOT NULL DEFAULT COMMENT 标题,created_time int(11…...

嵌入式学习35-网络通信UDP聊天及TCP

题目&#xff1a;基于UDP实现直播间聊天的功能 需求&#xff1a; 软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责&#xff1a; 1.接收用户的昵称 2.接收用户输入的信息&#xff0c;能够将信息发送给服务端 3.接收服…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...