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

news2024/12/26 10:34:38

C# MG.CamCtrl 工业相机库

    • 介绍
    • 一、使用案例
    • 二、使用介绍
      • 1、工厂模式创建实例
      • 2、枚举设备,初始化
      • 3、启动相机
      • 4、取图
      • 5、注销相机
    • 三、接口
        • 1、相机操作
        • 2、启动方式
        • 3、取图
        • 4、设置/获取参数

介绍

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

开源地址:https://gitee.com/laomaogu/mgcamctrl

现只兼容了大恒和海康,都是常用的
其他相机,看我老板啥时候换品牌吧,或者换老板?
当然如果小伙伴感兴趣,可以在这个框架下直接添加

一、使用案例

Sample路径下放了案例


在这里插入图片描述


二、使用介绍

注意:
一定要设置为 x64 编译平台

Created with Raphaël 2.3.0 开始 创建实例 枚举SN 初始化 启动相机,并开始采集 注销相机 结束

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()自动白平衡

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

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

相关文章

【Linux】在ubuntu快速搭建部署K8S(1.27)集群

ubuntu快速安装K8s1.27 &#xff08;一&#xff09;环境说明1.硬件环境2.Ubuntu环境设置 &#xff08;二&#xff09;安装配置containerd1.安装2.配置3.启动 &#xff08;三&#xff09;所有节点操作1.安装runc和cni2.节点系统设置、关闭临时分区3.修改内核参数4.安装 kubeadm、…

什么是 PCIe 及其工作原理?

什么是外围组件互连 Express (PCIe)&#xff1f; 外围组件互连 Express (PCIe) 是一种高速串行计算机扩展总线标准&#xff0c;可将设备连接到主板。 它于 2004 年首次推出&#xff0c;作为以前 PCI 和 AGP 方式的替代。 PCIe 允许处理器和各种扩展卡&#xff08;例如显卡、声…

PS入门|蒙版到底是个什么样的功能?看完就明白了

前言 前段时间一直说蒙版蒙版什么的&#xff0c;很多小伙伴估计都听得一头雾水。 抠个图要加蒙版&#xff0c;调个色要加蒙版。 小白感觉这个蒙版就像调味剂一样&#xff0c;啥都需要加一个蒙版。 动不动就加个蒙版&#xff0c;究竟是干啥用的&#xff1f; 今天咱们就深入来…

自动驾驶光学校准反射板

光学校准反射板是一种用于光学系统校准的重要工具。它以其高反射率和精确的几何特性&#xff0c;为光学仪器、光学系统和光学元件的校准提供了可靠的参考。在现代光学领域&#xff0c;光学校准反射板的应用已经深入到各个领域&#xff0c;从科学研究到工业生产&#xff0c;都离…

leetcode最大间距(桶排序+Python)

虽然直接排完序&#xff0c;再求最大差值更快&#xff0c;这里我们还是学一下桶排序。 桶排序主要维护一个bucket&#xff0c;初始bucket【i】 0&#xff0c;遍历nums&#xff0c;当i存在时&#xff0c;令bucket【i】 1&#xff0c;表示存在。遍历完nums&#xff0c;bucket中有…

海外平台运营为什么需要静态住宅IP?

在世界经济高度全球化的今天&#xff0c;许多企业家和电子商务卖家纷纷转向海外平台进行业务扩展。像亚马逊、eBay这样的跨国电商平台为卖家提供了巨大的机会&#xff0c;来接触到世界各地的顾客。然而&#xff0c;在这些平台上成功运营&#xff0c;尤其是维持账号的健康和安全…

代码随想录算法训练营第三十六天|435. 无重叠区间,763.划分字母区间,56. 合并区间

题目&#xff1a;435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi]。返回需要移除区间的最小数量&#xff0c;使剩余区间互不重叠。 题目链接/讲解链接&#xff1a; https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0…

C语言项目实践——贪吃蛇

引言&#xff1a;本篇博客中&#xff0c;我将会使用结构体&#xff0c;链表&#xff0c;WIN32 API等一系列知识完成C语言项目——贪吃蛇的实现。在观看此篇博客之前&#xff0c;请将这些知识所熟悉&#xff0c;不然可能会造成理解困难。 更多有关C语言的知识详解可前往个人主页…

AI预测福彩3D第9套算法实战化测试第1弹2024年4月22日第1次测试

经过前面多套算法的测试&#xff0c;总结了一些规律&#xff0c;对模型优化了一些参数&#xff0c;比如第8套算法的测试&#xff0c;7码的命中率由最开始的20%提高到了50%。虽然命中率有了很大的提高&#xff0c;但是由于咱们之前的算法只是为了测试和记录&#xff0c;提供的方…

C++学习进阶版(二):与文件相关的函数用法

目录 1、读取文件的指定行 &#xff08;1&#xff09;main函数中直接读 &#xff08;2&#xff09;封装成函数 ① 无返回值类型 ② 直接返回读取的内容 2、求文件的行数 3、文件内容读取成一个字符串 1、读取文件的指定行 &#xff08;1&#xff09;main函数中直接读 …

关于 Windows10 计算机丢失 MSVCP120.dll 的解决方法

今天学长跟平时一样打开电脑开始发布文章需要用到Adobe Photoshop CC 2018的时候居然给我来个Photoshop.exe-系统错误、无法启动此程序&#xff0c;因为计算机中丢失MSVCP120.dll 尝试重新安装该程序以解决此问题&#xff0c;安装上面的说明重新安装了我的Photoshop CC 打开还是…

移动端不居中问题/安卓和ios下line-height上下居中 css兼容问题

移动端开发过程&#xff0c;经常会写带0.5px边框角标类的样式&#xff0c;直接使用border设置0.5px边框&#xff0c;ios有些机型会出现显示不完整的情况。所以改用伪元素方法实现边框。代码如下&#xff1a; .comment-entry::after{content: ;position: absolute;left: 0;top: …

MySQL主从复制实现高可用性和负载均衡

大家好&#xff0c;我是咕噜铁蛋&#xff0c;今天我想和大家聊聊MySQL主从复制如何帮助我们实现高可用性和负载均衡。在如今的大数据时代&#xff0c;数据库的稳定性和性能成为了企业关注的重点&#xff0c;而MySQL主从复制正是解决这两个问题的重要工具。 一、MySQL主从复制简…

论21世纪的婚姻

什么是婚姻&#xff1f; 婚姻是一种社会与法律制度认可的男女两性基于感情自愿结成夫妻关系的社会组织形式&#xff0c;婚姻在百度百科上是这样回答的&#xff0c;通俗来说是两个人在民政局领结婚证后所组成为一个家庭。然而我认为这个是有水分的&#xff0c;在我看来&#xff…

混淆原理与实践指南

引言 &#x1f680; 在当今的软件开发领域&#xff0c;保护代码的安全性和保密性变得越来越重要。混淆&#xff08;Obfuscation&#xff09;技术作为一种保护代码的手段&#xff0c;在应对逆向工程和代码盗用方面发挥着关键作用。本文将深入探讨混淆的原理&#xff0c;以及如何…

文件上传服务器、文件展示等异步问题

问题&#xff1a; 文件上传模块&#xff1a;当文件已经上传完成&#xff0c;文件进度已经走完了&#xff0c;但是服务器响应还没有返回结果&#xff0c;出现了&#xff0c;获取不到上传后的文件路径&#xff0c;需要等待服务器返回结果后&#xff0c;才能获取文件路径并点击跳…

FPGA - ZYNQ 基于Axi_Lite的PS和PL交互

前言 在FPGA - ZYNQ 基于EMIO的PS和PL交互中介绍了ZYNQ 中PS端和PL端交互的开发流程&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 开发流程 Axi_Lite从机 在FPGA - AXI4_Lite&#xff08;实现用户端与axi4_lite之间的交互逻辑&#xff09;中&#xff0c;详解介绍…

weblogic反序列化漏洞(CVE-2017-10271)复现

直接用vuluhub搭建现成的靶场做 访问靶场 打开是这样表示成功 想反弹shell 就先开启kali1的nc监听&#xff0c;这就监听2233端口吧 linux&#xff1a;nc -l -p 2233 抓包修改为攻击数据包 ip和端口可以任意修改 反弹的shell 还可以写入文件shell 只需要把提供的poc POS…

4.10 SpringBoot整合Servlet、Filter过滤器和Listener

4.10 整合Servlet、Filter和Listener 1. 启动类1. 整合Servlet2. Filter过滤器3. Listener监听器4. 总结5. JavaWeb三大组件**************************************************** 一般情况下&#xff0c;使用Spring、Spring MVC这些框架之后&#xff0c;基本上就告别Servlet、…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;1&#xff09; 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”&#xff0c;它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…