2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片

1 目标效果视频

CamManager

2 CamManager读取本地文件时序

在这里插入图片描述

3 BD_Vision_Utility添加代码

3.0 导入链接库
  1. BD_OperatorSets.dll
  2. System.Windows.Forms.dll
  3. OpencvSharp
3.1 导入VisionParam中创建的文件Util_FileOP

并且添加代码GetFileNamewithextension,用于罗列文件夹中所有图片文件

/// <summary>
/// GetFileNamewithextension/// </summary>/// <param name="FilePath"></param>/// <param name="FileName"></param>public void GetFileNamewithextension(string FilePath, ref List<string> FileName){//获取指定文件夹下的文件夹名try{FileName.Clear();if (FolderExist(FilePath)){string[] StrFileName = Directory.GetFiles(FilePath);for (int i = 0; i < StrFileName.Length; i++){string extension = System.IO.Path.GetExtension(StrFileName[i]);//扩展名 “.aspx”if (extension == ".png" || extension == ".bmp" || extension == ".jpg" || extension == ".jpeg")FileName.Add(StrFileName[i]);}}}catch (Exception ex){throw new Exception("GetFileNamewithextension :" + ex.Message);}}
3.2 创建CamManager.cs
3.2.1 变量创建
/// <summary>
/// ImageFile_HANDLE
/// </summary>
private struct ImageFile_HANDLE
{public int n_index;// 当前img file indexpublic List<string> list_imgs;// img  file name listpublic void  Release(){n_index = -1;list_imgs.Clear(); }public ImageFile_HANDLE(int a=0){n_index = -1; list_imgs = new List<string>();}
}
private int camCount;/// <summary>
/// imgfiles_cams
/// 管理各个相机的文件资源
/// </summary>
private ImageFile_HANDLE[] imgfiles_cams;
3.2.2 Constructor
public Cam_Manager(int _camCount) 
{if (_camCount < 1) _camCount = 1;camCount = _camCount;imgfiles_cams = new ImageFile_HANDLE[camCount];for(int i=0;i< camCount;i++){imgfiles_cams[i] = new ImageFile_HANDLE();}
}
3.2.3 open(int CamNO)
/// <summary>
/// 打开相机
/// </summary>
/// <returns></returns>
public int Open(int CamNO)
{int nRet = 0;if (CamNO < 0 || CamNO > camCount - 1) return -1;// To Dostring camFiles_path = Application.StartupPath + "\\camSimulator\\Cam" + CamNO.ToString();ContextManager.get_fileopCtx().GetFileNamewithextension(camFiles_path, ref imgfiles_cams[CamNO].list_imgs);if (imgfiles_cams[CamNO].list_imgs.Count > 0) imgfiles_cams[CamNO].n_index = 0;else{nRet = -1; }return nRet;
}
3.2.4 grab(ref Mat ,ing CamNo)
public int Grab(ref Mat himg_tmp,int CamNO)
{
int nRet = 0;
if (CamNO < 0 || CamNO > camCount - 1) return -1;
if (himg_tmp == null) return -1; try
{if (imgfiles_cams[CamNO].list_imgs.Count > 0)// 文件夹中有图片{// 读取图片索引imgfiles_cams[CamNO].n_index = imgfiles_cams[CamNO].n_index % imgfiles_cams[CamNO].list_imgs.Count;// NewImage = Cv2.ImRead( ContextManager.getCamCtx().AcqHandle[CamNO].list_imgs[ ContextManager.getCamCtx().AcqHandle[CamNO].n_index], ImreadModes.Color);BD_OperateSet.Assign_Temp(ref himg_tmp, Cv2.ImRead(imgfiles_cams[CamNO].list_imgs[imgfiles_cams[CamNO].n_index], ImreadModes.AnyColor));imgfiles_cams[CamNO].n_index++;}else MessageBox.Show("Cam" + CamNO.ToString() + "没有图像来源");
}
catch (Exception ex)
{nRet = -2;
}
return nRet;
}
3.2.5 close()关闭相机
public int Close()
{int nRet = 0;// To Do for(int i=0;i<camCount;i++)imgfiles_cams[i].Release();Array.Clear(imgfiles_cams,0, imgfiles_cams.Length);return nRet;
}
3.3 ContextManager中增加一个CamManager的实例|FileOP的实例

实现自动的资源管理和初始化

//Cam_Manager 
private static Cam_Manager cam_Ctx;
public static Cam_Manager get_camCtx()
{if (cam_Ctx == null) cam_Ctx = new Cam_Manager(4);return cam_Ctx;
}
//  FileOP Manager
private static Util_FileOP fileop_Ctx;
public static Util_FileOP get_fileopCtx()
{if (fileop_Ctx == null) fileop_Ctx = new Util_FileOP();return fileop_Ctx;
}
4 下一节 我们会实现Form_Vision中的代码,并且附上范例代码

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

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

相关文章

安防监控/视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是什么原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

旅游计划定制小程序网页模板源码

手机在线旅游定制服务&#xff0c;定制旅游出行app小程序模板。包含&#xff1a;定制介绍、定制表单填写、我的订单等。 旅游计划定制小程序网页模板源码

C++ STL 文件系统用法介绍

目录 一. 获取当前工作目录 二:设置和读取文件写入时间 三:获取文件目录大小 四:获取文件类型信息 一. 获取当前工作目录 #include <filesystem> #include <iostream> #include <fstream> namespace fs = std::filesystem;int main() {std::cout &l…

交换机接口三种模式Access、Trunk、Hybrid

交换机接口的三种模式 1.access接口模式&#xff08;接入链路&#xff0c;接入模式&#xff09; 接收数据&#xff1a;当接收到一个无标记帧的时候&#xff0c;打上自己的PVid并接受&#xff08;就是自己的vlan标签&#xff09;。当接收到一个有标记帧的时候&#xff0c;对比…

swiftui中NavigationStack布局navigationBarTitleDisplayMode作用,以及内容顶部空白区域解决办法

写了一个小demo用于学习NavigationStack和toolbar/ToolbarItem知识&#xff0c;但是在写一个瀑布流布局的时候&#xff0c;设置了顶部的toolbar&#xff0c;然后内容区域的顶部出现了一大片空白区域&#xff0c;这样的效果并不是很美观很好看&#xff0c;所以就想着研究解决一下…

科普文:一文搞懂SpringBoot(狂神说Java)

1、Hello,World&#xff01; 1.1、SpringBoot简介 回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&#xff1a;Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是…

clickhouse学习笔记(五)SQL操作

目录 一、增 二、删改 三、查询以及各种子句 1、with子句 a、表达式为常量 b、表达式为函数调用 c、表达式为子查询 2、from子句 3、array join子句 a、INNER ARRAY JOIN b、LEFT ARRAY JOIN c、数组的一些函数 groupArray groupUniqArray arrayFlatten splitBy…

Java 如何在volatile内部调用接口

在Java中&#xff0c;volatile 关键字通常用于确保变量的可见性和有序性&#xff0c;而不是用来修饰接口或方法调用的。volatile 修饰的变量会被立即同步到主存&#xff0c;并且在每次访问时都会从主存中重新读取&#xff0c;而不是从缓存中读取。这意味着对volatile变量的修改…

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;31省 4、指标&#xff1a;全体居民人均消费支出、城镇居…

探索 Linux 的 /etc/hosts 文件:基础知识与实用指南

探索 Linux 的 /etc/hosts 文件&#xff1a;基础知识与实用指南 在 Linux 和 Unix 系统中&#xff0c;/etc/hosts 文件扮演着一个至关重要的角色。它是系统的本地 DNS&#xff08;域名系统&#xff09;解析器&#xff0c;负责将主机名映射到 IP 地址。在网络和系统管理中&…

Linux中软件yum安装与编译安装

yum安装与编译安装是Linux系统中常见的两种软件安装方式&#xff0c;它们在多个方面存在显著的区别。以下是对这两种安装方式的详细比较&#xff1a; yum安装 定义与特点&#xff1a; 定义&#xff1a;YUM&#xff08;Yellow dog Updater, Modified&#xff09;是Linux类系统…

Windows netstat命令详解,Windows查看网络连接

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 netstat 常用来…

rocketmq实现限流

目录 问题背景 技术方向 方案确认 消息队列&#xff08;√&#xff09; 分布式锁&#xff08;&#xff09; 方案实现 监控方向 业务方向 问题背景 公司邮件服务token有 分钟内超200封的熔断机制&#xff0c;当前token被熔断后&#xff0c;系统发邮件操作会被忽略&…

python中的原子操作简介

深入理解Python中的原子操作 在现代编程中&#xff0c;多线程是提高程序执行效率的常用技术。然而&#xff0c;当多个线程并发执行时&#xff0c;如何确保数据的一致性和操作的正确性成为了一个关键问题。原子操作&#xff08;Atomic Operation&#xff09;便是解决这一问题的…

责任链模式(大话设计模式)C/C++版本

责任链模式 C #include <iostream> #include <memory>using namespace std; // 请求类 struct Request {std::string requestType; // 请求类型int number; // 该请求类型的数量std::string requestContent; // 请求内容 };// 抽象经理类 clas…

MySQL学习记录 —— 십칠 CentOS7.9环境下的MySQL8.4 安装和配置

文章目录 1、安装和配置2、MySQL 包位置3、主要程序介绍 本篇开始在之前mysql博客的基础上继续延伸&#xff0c;适合有一定基础的mysql使用者阅读 环境 &#xff1a;CentOS 7.9 root 用户&#xff0c;MySQL 8.4 1、安装和配置 看一下当前系统版本 cat /etc/redhat-release应当…

前端重点之:Vue+websocket通信详细用法和websocket心跳机制的使用,websocket断开实时监测,websocket实时通信

今年年初找工作,好多gou面试官总喜欢问关于websocket通信的使用方式,此次又用到了,在此做个总结:主要包含websocket的具体使用方法,和重点:(心跳机制的使用),就是主要是前端实时监测websocket是否有断连和数据的处理 在前端开发中,WebSocket 是一种常见的技术,用于…

浅谈序列化及文本格式

序列化及文本格式 需求背景 软件项目在开发过程中&#xff0c;将大量初始化配置项在一定程度上保存在配置文件中。肯定有很多人有疑问&#xff0c;为什么不将这些信息放在软件内存中。开机时与用户交互进行确认&#xff1f;这肯定是一个好想法&#xff0c;但是如果配置太多或…

众所周知沃尔玛1P是怎么运营?

​​沃尔玛的1P模式&#xff0c;即第一方供应商模式&#xff0c;是其独特的采购策略。在这种模式下&#xff0c;供应商先将商品卖给沃尔玛&#xff0c;由沃尔玛负责库存管理和销售。沃尔玛通过强大的采购和物流能力控制库存&#xff0c;确保商品品质&#xff0c;为客户提供更加…

FPGA问题

fpga 问题 第一道坎&#xff0c;安装软件&#xff1b;没有注册&#xff0c;无法产生sop文件&#xff0c;无法下载 没有相应的库的quartus ii版本&#xff0c;需要另下载 第二道坎&#xff0c;模拟器的下载&#xff0c;安装&#xff1b; 第三道&#xff0c;verilog 语法&#x…