2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片(Form_Vision部分代码)

news2024/9/20 23:23:54

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片(Form_Vision部分代码)

1 目标效果视频

CamManager

2 增加一个class IMG_BUFFER 用来管理采集的图片

// <summary>
/// IMG_BUFFER 用来管理内存图片的抓取队列
/// </summary>
public class IMG_BUFFER
{
    public List<Mat> list_imgs_acq;
    private object mutex;
    private int max_count = 3;
    public IMG_BUFFER()
    {
        list_imgs_acq = new List<Mat>();
        mutex = new object(); 
    }
    /// <summary>
    /// 图片入栈
    /// </summary>
    /// <param name="himg_acq"></param>
    /// <returns></returns>
    public  int Add(Mat himg_acq)
    {
        int nRet = 0;
        if (list_imgs_acq.Count >= max_count) return -1;
        lock(mutex)
        {
            list_imgs_acq.Add(himg_acq);
        }
        return nRet;
    }

    /// <summary>
    /// 获取一张图片
    /// </summary>
    /// <returns></returns>
    public Mat Pop_Front()
    {
         
        Mat tmp = new Mat();
        if (list_imgs_acq.Count ==0) return tmp;
        lock (mutex)
        {
            tmp = list_imgs_acq[0];
            list_imgs_acq.RemoveAt(0);
        }
        return tmp;
    }
}

3 本地Debug目录下增加一下文件,用于模拟相机采集的图片

在这里插入图片描述
在Cam0中放入3张图片
在这里插入图片描述

4 Form_vision初始化 读取一张照片,并显示在屏幕上

Open_Resources()中增加代码

// opencamCtx
int CamNO = 0;
ContextManager.get_camCtx().Open(CamNO);
ContextManager.get_camCtx().Grab(ref himg_tmp, CamNO);

 bdDisplay_Runsets1.picture_cam.InitDisplay_Mat(ref himg_tmp);

5 ImgAcq线程增加采集图片代码

if (n_trig0_cur > 0 && n_trig0_last == 0)  //判断上升沿触发
{
    //相机采集
    int nRet = 0;
    nRet = ContextManager.get_camCtx().Grab(ref himg_tmp, CamNO);
    if(nRet==0)
    {
        // 图片入栈
        imgs_buffer.Add(himg_tmp);
        //AutoEvent set,通知ImgProcess
        newImgEvent_thread.Set();
    }
}

6 ImgProcess线程增加图片处理代码

  1. BDDisplay_Runsets中增加一个Display函数
    Q:为什么使用invoke()?
    A: 因为从另外一个线程调用资源显示,可能会报警
    解决方法1:CheckForIllegalCrossThreadCalls = false; //不检查线程间操作(如果程序抛出了“线程间操作无效”异常,可以添加该行代码)
    解决方法2:invoke()
/// <summary>
/// Display
 /// </summary>
 /// <param name="himg"></param>
 public void Display(  OpenCvSharp.Mat himg)
 {
     if (BD_OperateSet.MatNull(himg)) return;
     this.Invoke(new Action(() => { 
         picture_cam.Display_Mat(ref himg);
     }));
 }
  1. ImgProcessCCD(int n_thread_index = 0)增加代码
// 添加线程统计信息
Mat tmp = imgs_buffer.Pop_Front();
 if(BD_OperateSet.MatisNotNull(tmp))
 { 
     bdDisplay_Runsets1.Display(tmp);
 }
 else
 {
     status = false;
 }

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

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

相关文章

基于AI的3D场景重建技术新突破!破局自动驾驶端到端仿真

场景的保真度&#xff0c;对于自动驾驶仿真和合成数据生成至关重要&#xff0c;场景重建保真度不足&#xff0c;将极大地制约高阶自动驾驶系统的训练效果。同时&#xff0c;在用于训练大模型和具身智能的合成数据领域&#xff0c;同样对低成本的高保真场景有巨大的需求。 在此…

【Python_GUI】thinker布局管理——pack()方法

pack()方法是比较常用的布局组件之一&#xff1a;其语法如下&#xff1a; widget.pack(options) 其常用的参数及含义如下&#xff1a; 参数含义side设置组件水平展示或垂直展示padx设置组件距离窗口的水平距离pady设置组件距离窗口的垂直距离ipadx设置组件内的文字距离组件边…

从零开始做题:My_lllp

题目 给出一张png图片 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zulu/My_lllp] └─$ python2 lsb.py extract my_lllp.png out.txt my_lllp [] Image size: 1080x1079 pixels. [] Written extracted data to out.txt. ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zul…

HSP_15章 Python_模板设计模式和oop进阶总结

P136 模板设计模式 1. 设计模式简介 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 设计模式就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用不同的棋谱&#xff0c;免去我们自己再思考和摸索 2. 模板设计模式 基本…

DFS回溯剪枝|KMP通过数组记录减少判断子字符串|思路

KMP|DFS回溯剪枝 #1、NC149kmp 初步思路&#xff1a; 两层for循环&#xff0c;一个T的字符开始与 S的字符比较&#xff0c;挨个比较&#xff0c;遇到不同就continue当前T的字符&#xff0c;重复步骤》效率太低&#xff0c;超时 eg: TABSABABABD SABABD S&#xff01;A时&#…

Windows10/11家庭版开启Hyper-V虚拟机功能详解

Hyper-V是微软的一款虚拟机软件&#xff0c;可以使我们在一台Windows PC上&#xff0c;在虚拟环境下同时运行多个互相之间完全隔离的操作系统&#xff0c;这就实现了在Windows环境下运行Linux以及其他OS的可能性。和第三方虚拟机软件&#xff0c;如VMware等相比&#xff0c;Hyp…

Java版Flink使用指南——定制RabbitMQ数据源的序列化器

大纲 新建工程新增依赖数据对象序列化器接入数据源 测试修改Slot个数打包、提交、运行 工程代码 在《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中&#xff0c;我们从RabbitMQ队列中读取了字符串型数据。如果我们希望读取的数据被自动化转换为一个对象&#x…

white-space属性换行

white-space 属性可以控制元素中文本的换行方式。常用的取值有&#xff1a; normal&#xff08;默认值&#xff09;&#xff1a;根据容器的大小自动换行。nowrap&#xff1a;文本不进行换行&#xff0c;超过容器宽度时会溢出。pre&#xff1a;保留原始的空白符&#xff08;空格…

5.Python学习:面向对象

1.面向对象和面向过程的区别 以下五子棋为例&#xff1a; 2.类和实例 &#xff08;1&#xff09;类是抽象的模板&#xff0c;实例是根据模板创建出来的具体的对象 &#xff08;2&#xff09;比如人类就是一个类&#xff0c;刘亦菲就是人类的一个实例 2.1 新建类和类的实例…

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中&#xff0c;使用uniapp开发的项目开发效率是极高的&#xff0c;使用一套代码就能够同时在多端上线&#xff0c;像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题&#xff0c;这种方式本质上实际上是h5和h5之间的通信&#xff0c;网上有非常多…

计算机的错误计算(二十五)

摘要 介绍&#xff08;不&#xff09;停机问题。给了一个算式&#xff0c;当计算机的输出为0时&#xff0c;一般需要提高计算精度继续计算&#xff0c;一直到获得非0值或有效数字。但是&#xff0c;由于事先不清楚算式的准确值是否为0或不为0&#xff0c;因此往往陷入两难境地…

LLM - Transformer 的 多头自注意力(MHSA) 理解与源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140281680 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 在 Transformer 中,多头自注意力机制 (MHSA, Multi-Head Self-Attenti…

关系型数据库MySQL和时序数据库的区别?

时序数据库和关系型数据库是两种不同类型的数据库系统&#xff0c;它们在设计理念、存储结构、性能优化等方面有显著差异&#xff0c;以适应不同的应用场景和需求。具体对比如下&#xff1a; 数据存储结构 时序数据库&#xff1a;使用列式存储&#xff0c;每条记录通常包含时间…

Johnson Counter

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 请用Verilog实现4位约翰逊计数器&#xff08;扭环形计数器&#xff09;&#xff0c;计数器的循环状态如下。 电路的接口如下图所示。 输入描述&#xff1a; input clk , input …

力扣喜刷刷--day1

1.无重复字符的最长子串 知识点&#xff1a;滑动窗口 基本概念 窗口&#xff1a;窗口是一个连续的子序列&#xff0c;可以是固定长度或可变长度。滑动&#xff1a;窗口在数据序列上移动&#xff0c;可以是向左或向右。边界&#xff1a;窗口的起始和结束位置。 应用场景 字符…

YOLOv10改进 | Conv篇 | 利用DualConv二次创新C2f提出一种轻量化结构(轻量化创新)

一、本文介绍 本文给大家带来的改进机制是利用DualConv改进C2f提出一种轻量化的C2f&#xff0c;DualConv是一种创新的卷积网络结构&#xff0c;旨在构建轻量级的深度神经网络。它通过结合33和11的卷积核处理相同的输入特征映射通道&#xff0c;优化了信息处理和特征提取。Dual…

关于 off-by-one 的学习

pwn的功底还很浅&#xff0c;仅仅是记录自己学习的一点心得体会。 后续随着学习深入&#xff0c;还会补知识点和题目上来。 知识点 优秀的学习资料 关于off by null的学习总结 | ZIKH26 Chunk Extend and Overlapping | ctfwiki 一点理解 与off-by-one联系很紧密的就是上…

Fastapi在docekr中进行部署之后,uvicorn占用的CPU非常高

前一段接点小活&#xff0c;做点开发&#xff0c;顺便学了学FASTAPI框架&#xff0c;对比flask据说能好那么一些&#xff0c;至少并发什么的不用研究其他的asgi什么的&#xff0c;毕竟不是专业开发&#xff0c;能少研究一个东西就省了很多的事。 但是部署的过程中突然之间在do…

典型案例 | 基于全数字实时仿真的嵌入式DevOps解决方案

为丰富浙江省信息技术应用创新&#xff08;以下简称“信创”&#xff09;产业生态&#xff0c;在全社会各领域形成示范效应&#xff0c;浙江省经信厅联合省密码管理局开展2023年浙江省深化信创典型案例评选工作。 经过征集申报、专家评选、名单公示等程序&#xff0c;确定36个…

秒懂设计模式--学习笔记(6)【创建篇-建造者模式】

目录 5、建造者模式5.1 介绍5.2 建造步骤的重要性5.3 地产开发商的困惑5.4 建筑施工方5.5 工程总监5.6 项目实施5.7 建造者模式的各角色定义5.8 建造者模式 5、建造者模式 5.1 介绍 建造者模式&#xff08;Builder&#xff09;又称为生成器模式&#xff0c;主要用于对复杂对象…