c# 海康照相机操作封装类(网口,USB)

需求

        在上位机开发中, 海康照相机的使用应该是很常见的,主要是网口通讯的相机用的多,有时也会用一些USB接口相机。以前项目都在赶时间做。没有时间去好好设计和封装。时间长了发现重复代码就很多,还有没有设计和封装的代码,代码份数和相机个数对等,说白了就是一个相机写一个相机类,基本都长一样,可能是就IP或相机名称不一样。最近有点空就来优化一下代码。这次优化完后可以直接用在以后的项目中。成熟代码没有BUG,减少重复开发,提高工作效率。

设计思想

        用面像对像思想,将相机的常用属性和行为提取。在使用时只要New 一个相机对象就可以,有几个相机New几个就可以,让调用最简单化。

引用

        MvCameraControl.Net

        sdk 下载:https://download.csdn.net/download/cjh16606260986/88786823

代码调用        

Global.CamStandardization = new HKCam(CommonConstant.CamNameStandardization, true);
Global.CamWeldHead = new HKCam(CommonConstant.CamNameWeldHead, false, 2000);

封装代码

        分成三个类:

                相机类 HKCam,相机公共方法类 HKCamComm,相机基本信息类 CameraModel

        相机基本信息类 CameraModel

                主要是相机的基本属性,如索引,名称,描述,相机类型

                

/// <summary>
/// 相机实体
/// </summary>
public class CameraModel
{/// <summary>/// 索引/// </summary>public int Index { get; set; }/// <summary>/// 相机名称/// </summary>public string Name { get; set; }/// <summary>/// 描述/// </summary>public string Description { get; set; }/// <summary>/// 相机类型 MyCamera.MV_GIGE_DEVICE,MyCamera.MV_USB_DEVICE/// </summary>public uint nTLayerType { get; set; }
}

        相机公共方法类 HKCamComm

                主要是一些公共方法。加载所有相机,相机列表,相机初始化,关闭相机

/// <summary>
/// 照相机(海康) 公共方法
/// </summary>
public class HKCamComm
{/// <summary>/// 相机 列表/// </summary>public static MyCamera.MV_CC_DEVICE_INFO_LIST CameraList = new MyCamera.MV_CC_DEVICE_INFO_LIST();/// <summary>/// 相机 列表 (相机名称,CameraList的索引)/// </summary>private static Dictionary<string, CameraModel> CameraNameAndIndexDic = new Dictionary<string, CameraModel>();/// <summary>/// 加载相机/// </summary>public static string LoadCameraDic(){int nRet = MyCamera.MV_OK;if (CameraNameAndIndexDic.Count == 0){CameraList.nDeviceNum = 0;nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref CameraList);if (MyCamera.MV_OK != nRet)return "没有找到设备!";if (0 == HKCamComm.CameraList.nDeviceNum)return "设备的个数为0!";var count = CameraList.nDeviceNum;if (CameraNameAndIndexDic.Count != count){for (int i = 0; i < count; i++){var cameraModel = new CameraModel();cameraModel.Index = i;MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(CameraList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE){//获取相机名MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO));if (!string.IsNullOrEmpty(gigeInfo.chUserDefinedName)){cameraModel.Name = gigeInfo.chUserDefinedName;}else{cameraModel.Name = "GEV: " + gigeInfo.chManufacturerName + " " + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")";}}else if (device.nTLayerType == MyCamera.MV_USB_DEVICE){MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stUsb3VInfo, typeof(MyCamera.MV_USB3_DEVICE_INFO));if (!string.IsNullOrEmpty

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

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

相关文章

【优秀案例】回本周期缩短10%!日安装量级高达5000以上!看NetMarvel如何赋能Ball Sort达成多项目标

“合成大西瓜在海外火了” 没想到&#xff0c;在国内已经过气的玩法转战到海外后&#xff0c;还能够翻红的这么彻底&#xff1f; 实际上&#xff0c;市面上很多在本土市场不温不火但转战海外赛道却盈利感人的应用不在少数&#xff0c;比如我们今天的重头戏《Ball Sort - Colo…

iView 中DatePicker日期选择器 v-model不生效的情况

场景 公司项目前段使用的是iview样式库&#xff0c;在开发的过程中&#xff0c;需要使用到时间选择器 使用后发现&#xff0c;输出的时间格式有问题&#xff0c;查看了需要使用到format来设置输出内容&#xff0c;发现不生效 百度… 1、百度后了解到v-model和format使用&…

基于Element的进度条Loading

基于Element的进度条loading组件 前端在中后台项目开发中经常要使用到loading遮罩层在数据交互时展示&#xff0c;目前我使用element组件库的loading&#xff0c;发现不能自定义&#xff0c;loading的样式比较少&#xff0c;官方只提供修改loading的图标和文字。 但是我的需求…

【云上建站】快速在云上构建个人网站4——网站备案

快速在云上构建个人网站4——网站备案 一、为网站配置域名1、使用域名的原因2、域名使用逻辑3、域名配置流程 二、域名注册1、查询域名&#xff1a;2、确认订单&#xff1a;3、实名认证域名4、域名解析配置解析域名&#xff1a;解析设置&#xff1a;访问域名&#xff1a; 一、为…

【深度学习:多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型

【深度学习&#xff1a;多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型 Meta 发布开源人工智能工具的历史分段任何模型DINOv2 什么是多模态学习&#xff1f;什么是嵌入&#xff1f;什么是 ImageBind&#xff1f;集成在 ImageBind 中的模式图像绑定架构特定模式编码器跨…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题&#xff1a; 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗&#xff1f; 4.鸿蒙的生态&#xff08;用户以及开发者&#xff09; 5.一些建议 1月18日&#xff0c;在鸿蒙生态千帆启航仪式上&#xff0c;华为宣布了继鸿蒙4…

实现单点登录

指再多系统应用群中登录一个系统&#xff0c;便可在其他所有系统中得到授权而无需再次登录&#xff0c;包括单点登录与单点注销两部分。 相比于单系统登录&#xff0c;sso需要一个独立的认证中心&#xff0c;只有认证红心能接受用户的用户名密码等安全信息&#xff0c;其他系统…

C#,打印漂亮的贝尔三角形(Bell Triangle)的源程序

以贝尔数为基础&#xff0c;参考杨辉三角形&#xff0c;也可以生成贝尔三角形&#xff08;Bell triangle&#xff09;&#xff0c;也称为艾特肯阵列&#xff08;Aitkens Array&#xff09;&#xff0c;皮埃斯三角形&#xff08;Peirce Triangle&#xff09;。 贝尔三角形的构造…

Python办公自动化:解锁高效工作流程,掌握文档处理的艺术

1.python自动化办公 Python 在自动化办公方面非常强大和灵活&#xff0c;能够帮助提高工作效率&#xff0c;自动化完成重复性任务。Python 提供了多种库和工具&#xff0c;可以用于处理文档、电子表格、PDF 文件、电子邮件等。下面是一些常用的 Python 自动化办公库及其应用&a…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

题记(35)--日期累加

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 设计一个程序能计算一个日期加上若干天后是什么日期。 二、输入描述 输入第一行表示样例个数m&#xff0c;接下来m行每行四个整数分别表示年月日和累加的天数。 三、输出描…

鸿蒙 ArkTS 从数组内查找指定的数据

let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者&#xff1a; 首先&#xff0c;我要感谢您抽出宝贵的时间阅读这篇文章。我深知&#xff0c;您的每一分每一…

新概念英语第二册(47)

New words and expressions】生词和短语&#xff08;9&#xff09; thirsty adj. 贪杯的 ghost n. 鬼魂 haunt v. &#xff08;鬼&#xff09;来访&#xff0c;闹鬼 block …

深入解析Lombok中的@SneakyThrows注解原理

在Java开发中&#xff0c;异常处理一直是一个重要的部分。Java中的异常分为受检查异常&#xff08;checked exceptions&#xff09;和未受检查异常&#xff08;unchecked exceptions&#xff09;。受检查异常需要在方法签名中显式声明&#xff0c;或者在方法体内部捕获处理&…

Codeforces Round 479 (Div. 3)

这一场div3整体比较简单注意细节即可 目录 A. Wrong Subtraction B. Two-gram C. Less or Equal D. Divide by three, multiply by two E. Cyclic Components F. Consecutive Subsequence A. Wrong Subtraction 按照题目意思直接模拟操作次数即可 void solve(){cin>…

05 MyBatis之表关系的声明+事务+SqlSession三件套的作用域

MyBatis 支持一对一&#xff0c;一对多&#xff0c;多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…

行为型设计模式—迭代器模式

迭代器模式&#xff1a;也叫作游标模式&#xff0c;能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下&#xff0c; 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构&#xff0c;且希望对客户端隐藏其复…

Qt扩展-muParser数学公式解析

muParser数学公式解析 一、概述1. 针对速度进行了优化2. 支持的运算符3. 支持的函数4. 用户定义的常量5. 用户定义的变量6. 自定义值识别回调7. 其他功能 二、内置函数三、内置二元运算符四、三元运算符五、内置常量六、源码引入1. 源码文件2. 编译器开关1. MUP_BASETYPE2.MUP_…

【中关村开源生态论坛暨大模型智能应用技术大会】—— 探索AI和开源在未来的应用

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-9ttR7rpX3BzyF2C4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…