首页 > 编程语言 >4 联合编程

4 联合编程

时间:2024-10-11 14:45:06浏览次数:8  
标签:sender void 编程 fifo 采集 private 联合 图像

4 联合编程

C#连接相机

  1. 添加相关的VisionPro控件

    1. 打开vs
    2. 在工具箱中右键 => 选择项 => 勾选CogAcqFifoEditV2(配置相机)、CogRecordDisplay(图片展示工具)​​
  2. 将上面添加的两个控件都拖到窗体的合适位置

  3. 隐藏代码中配置如下代码

    // 取相工具
    CogAcqFifoTool acqFifoTool = new CogAcqFifoTool();
    // 窗体加载事件
    private void Form1_Load(object sender, EventArgs e)
    {
      // 设置相机配置工具的工作目标为取相工具
      acqFifoTool.Subject = cogAcqFifoTool1;
    }
    // 拍照按钮点击事件
    private void button1_Click(object sender, EventArgs e)
    {
      // 运行取相工具
      acqFifoTool.Run();
      // 获取取相工具的输出图像并赋值给图像展示工具
      cogRecordDisplay1.Image = acqFifoTool.OutputImage;
      // 自适应
      cogRecordDisplay1.Fit();
    }
    // 窗体关闭事件
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
      // 如果取相工具有相机
      if (acqFifoTool.Operator != null)
      {
        // 应该将相机释放
        acqFifoTool.Operator?.FrameGrabber.Disconnect(false);
      }
    }
    

使用ICogFrameGrabber连接相机

  • CogFrameGrabbers fgs = new CogFrameGrabbers();​ 获取所有图像采集设备,可迭代,有索引器

  • ICogFrameGrabber.Disconnect(false)​ 释放相机,应该在窗体关闭的事件中释放所有相机的连接

  • ICogAcqFifo fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true)​ 创建图像采集对象,并配置相关信息

    • 参数1:视频格式
    • 参数2:采集图像类型
    • 参数3:是否自动准备
  • ICogAcqFifo.Complete​事件,图像采集完成将会触发该事件

  • ICogAcqFifo.GetFifoState(out int numPending, out int numReady, out bool busy)​ 获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙

  • ICogAcqFifo.CompleteAcquireEx(CogAcqInfo)​ 获取当前采集的图像

  • ICogAcqFifo.StartAcquire()​ 开始进行图像采集,采集完成将会触发Complete事件

  • int ICogAcqFifo.OwnedExposureParams.Exposure​ 读取或这是图像采集对象的曝光度

  • double ICogAcqFifo.OwnedContrastParams.Contrast​ 读取或这是图像采集对象的对比度(范围0-1)

  • CogRecordDisplay.StartLiveDisplay(ICogAcqFifo)​ 在该控件上进行实时图像采集

  • CogRecordDisplay.StopLiveDisplay()​ 停止实时采集

下面是一个连接相机、拍照、实时预览、设置曝光、设置对比度的示例

// 存储所有的采集设备信息
CogFrameGrabbers fgs;
// 存储当前选中的采集设备信息
ICogFrameGrabber grabber;
// 存储由采集设备创建的图像抓取对象
ICogAcqFifo fifo;
// 窗体加载时
private void Form1_Load(object sender, EventArgs e)
{
    // 获取所有的可用设备
    fgs = new CogFrameGrabbers();
    // 循环添加到下拉菜单中
    foreach (ICogFrameGrabber item in fgs)
    {
        comboBox1.Items.Add(item.Name);
    }
}
// 下拉菜单选项变化时
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex != -1 && fgs.Count != 0)
    {
        // 获取当前选中的采集设备信息
        grabber = fgs[comboBox1.SelectedIndex];
        // 创建图像采集对象,并配置
        // 参数1:视频格式
        // 参数2:采集图像类型
        // 参数3:是否自动准备
        fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
        // 监听Complete事件,图像采集完成将会触发该事件
        fifo.Complete += Fifo_Complete;
    }
}
private void Fifo_Complete(object sender, CogCompleteEventArgs e)
{
    // 获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙
    fifo.GetFifoState(out int numPending, out int numReady, out bool busy);
    // 如果已准备图像数量大于0
    if(numReady > 0)
    {
        // 停止实时显示
        cogRecordDisplay1.StopLiveDisplay();
        // 获取并显示已准备好的图像
        cogRecordDisplay1.Image = fifo.CompleteAcquireEx(new CogAcqInfo());
    }
}
private void button1_Click(object sender, EventArgs e)
{
    if (fifo == null) return;
    fifo.StartAcquire();    // 开始进行图像采集,采集完成将会触发Complete事件
}
private void button2_Click(object sender, EventArgs e)
{
    // 开始实时预览
    cogRecordDisplay1.StartLiveDisplay(fifo);
}
private void button3_Click(object sender, EventArgs e)
{
    // 停止实时预览
    cogRecordDisplay1.StopLiveDisplay();
}
private void button4_Click(object sender, EventArgs e)
{
    int bg = int.Parse(textBox1.Text);
    // 设置曝光
    fifo.OwnedExposureParams.Exposure = bg;
}
private void button6_Click(object sender, EventArgs e)
{
    double dbd = double.Parse(textBox3.Text);
    // 设置对比度(范围0-1)
    fifo.OwnedContrastParams.Contrast = dbd;
}

标签:sender,void,编程,fifo,采集,private,联合,图像
From: https://www.cnblogs.com/laoguonana/p/18458351/4-joint-programming-25um8r

相关文章

  • 首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
    最近两年,随着大语言模型和生成式AI技术的爆火,软件开发领域首当其冲成为了最热门的大模型应用场景之一,通义灵码等AI辅助编程工具纷纷问世。这些工具通过自然语言处理和机器学习技术,能够理解开发者的意图,并且提供行级/函数级代码、单元测试和代码注释的智能生成等功能,极大地提......
  • 首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
    最近两年,随着大语言模型和生成式AI技术的爆火,软件开发领域首当其冲成为了最热门的大模型应用场景之一,通义灵码等AI辅助编程工具纷纷问世。这些工具通过自然语言处理和机器学习技术,能够理解开发者的意图,并且提供行级/函数级代码、单元测试和代码注释的智能生成等功能,极大地提......
  • The Network Program Log One(网络自动编程)
    ​Practice1importparamikoimporttimefromncclientimportmanagerfromncclient.xml_importto_elefrompysnmp.hlapiimport*importsocketclassDevice:definit(self,ip,name):self.ip=ipself.name=nameself.vty=Noneself.ssh_session=Nonedef......
  • 实验1 现代C++编程初体验
    实验任务1代码1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9......
  • 实验1 现代C++编程初体验
    任务1代码:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#inc......
  • 第一篇博客(2024级新生的简单自我介绍及学习编程经历)
    亲爱的读者: 大家好!先来谈谈我写这篇博客的目的吧,写这篇博客的目的便是:1.做一个自我介绍。2.讲一讲我了解编程学习以及大学的经历。3.谈谈我对于我自己编程学习的看法。(学习目标,学习方法,花费时间)4.锻炼我的写作能力。(1)首先,本人网名为“尘饰”,来自于江西某个大学的2024级新......
  • Window系统编程 - 文件操作
    前言各位师傅大家好,我是qmx_07,今天主要介绍使用windows系统编程操作读写文件文件CreateFile()函数讲解介绍:该函数用于打开文件或者I/O流设备,文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot和管道接下来我们学习一下CreateFile......
  • 量化交易需要哪些编程技能,都有哪些优势?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>Python:量化交易的核心编程语言Python的基础优势Python在量化交易中犹如一把万能钥匙。它的简洁性使得即使是编程新手也能快速上手。对于......
  • 实验1 现代C++编程初体验
    实验任务11//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#inc......
  • [编程笔记] 未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程
    使用IIS部署站点,指向代码根目录,启动时报“未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序。” 直接启动项目是可以的,解决上述错误很简单,看下项目属性: 这里是x86位数的,对应系统就是Windows32,一般我们工作用的电脑基本都......