当前位置: 首页 > article >正文

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)

  • Baumer工业相机
  • Baumer工业相机定序器功能的技术背景
  • Baumer工业相机通过NEOAPI SDK使用定序器功能
    • 预期的相机动作
    • 定序器的工作原理
  • Baumer工业相机通过NEOAPI SDK使用定序器功能具体实现方法
    • 1.引用合适的类文件
    • 2.通过NEOAPI SDK开启定序器功能实现一次触发控制三个光源分别采集三张图像
  • Baumer工业相机使用定序器功能实现一次触发控制三个光源开关分别采集三张图像的优势
  • Baumer工业相机使用定序器功能实现一次触发控制三个光源开关分别采集三张图像的行业应用

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。​

Baumer工业相机堡盟相机在SDK中提供了一种在收到单个触发信号时同时通过相机的IO信号控制三个光源,并分别采集三种不同光源下的图像的方法。

下面介绍实现一次触发控制三个光源开关分别采集三张图像的方法可以使用Baumer工业相机自带的定序器的功能

Baumer工业相机定序器功能的技术背景

Baumer工业相机的NEOAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。

NEOAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。

工业相机的 定序器Sequencer 功能是一种高级的编程功能,允许用户将多种拍摄参数设置成独立的序列,实现对相机的自动切换控制以满足多种不同的应用需求。使用 Sequencer 功能可以实现在一个拍摄周期内,完成多个曝光、图像传输和处理任务,从而提高工程效率和质量。

Baumer工业相机通过NEOAPI SDK使用定序器功能


下面介绍在C#里Baumer工业相机如何通过NEOAPI SDK进行定序器编程:实现一次触发控制三个光源开关分别采集三张图像

预期的相机动作

从理论上讲,该方法首先要求相机设置为触发模式,当每次收到触发信号时,再控制三个不同的IO信号去控制光源,然后再采集不同光源条件下的三张图像。

定序器的工作原理

从理论上讲,该方法首先要求相机设置为触发模式,当每次收到触发信号时,在同样的曝光时间内采集两张图像。

考虑到定序器的基本原理,定序器的参数设置比预想的要复杂得多:
设置硬件触发输入参数和 GPIO 输出。
开启定序器设置模式,循环设置三组定序器功能,分别控制不同的光源打开和关闭,并设置相应的曝光参数。
关闭定序器设置模式,开启相机定序器功能和图像采集。

Baumer工业相机通过NEOAPI SDK使用定序器功能具体实现方法

下面介绍在C#里Baumer工业相机如何通过NEOAPI SDK使用定序器实现一次触发控制三个光源开关分别采集三张图像

在使用定序器时,可能需要提前设置,以便可视化显示在什么时间应当发生的事件。在本例中,设置非常简单:

第一张图像的采集由硬件触发(通过“Line0”输入实现)——Line0同时触发定序器启动

第一组定序器(Set0)开始配置并触发第二张图像的采集

第二组定序器组(Set1)开始配置并触发第三张图像的采集

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;
using NeoAPI;

2.通过NEOAPI SDK开启定序器功能实现一次触发控制三个光源分别采集三张图像

Baumer工业相机设置定序器功能模式核心代码如下所示:


NeoAPI.Cam camera = new NeoAPI.Cam();
camera.Connect();                                       // connect to a camera

MatType type;
bool isColor = true;
Feature pixelformat = new Feature();
camera.f.ExposureTime.Value = 10000;

if (camera.IsConnected)
{
	  // STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
        camera.f.AcquisitionStop.Execute();
        camera.f.UserSetSelector.Set(UserSetSelector.Default);
        camera.f.UserSetLoad.Execute();
        
        // 设置第一张硬件触发输入参数
        camera.f.TriggerMode.ValueString = "On";
        camera.f.TriggerSource.ValueString = "Line0";
        camera.f.TriggerActivation.ValueString = "RisingEdge";
        camera.f.TriggerDelay.Value = 0.0;
        camera.f.LineSelector.ValueString = "Line0";
        camera.f.LineInverter.ValueBool = false;
        camera.f.LineDebouncerHighTimeAbs.Value = 1.0;
        camera.f.LineDebouncerLowTimeAbs.Value = 1.0;
        
        // 设置 GPIO "Line3" 作为输出
        camera.f.LineSelector.ValueString = "Line3";
        camera.f.LineInverter.ValueBool = false;
        camera.f.UserOutputSelector.ValueString = "UserOutput1";
        camera.f.UserOutputValue.ValueBool = false;
        camera.f.LineSource.ValueString = "UserOutput1";
        
        // 开启定序器设置模式
        camera.f.SequencerConfigurationMode.ValueString = "On";
        string[] ioLines = { "Line3", "Line4", "Line5" };
        double[] exposureTimes = { 15000.0, 10000.0, 8000.0 };
        for (int i = 0; i < 3; i++)
        {
            // 设置第 i 组定序器功能
            camera.f.SequencerSetSelector.ValueLong = i;
            camera.f.SequencerSetLoad.Execute();
            // 控制对应光源打开
            camera.f.LineSelector.ValueString = ioLines[i];
            camera.f.UserOutputValue.ValueBool = true;
            // 设置第 i 组定序器的触发模式和计数器相关参数
            if (i == 0)
            {
                camera.f.TriggerMode.ValueString = "On";
                camera.f.CounterSelector.ValueString = "Counter1";
                camera.f.CounterEventSource.ValueString = "Off";
            }
            else
            {
                camera.f.TriggerMode.ValueString = "Off";
                camera.f.CounterSelector.ValueString = "Counter1";
                camera.f.CounterEventSource.ValueString = "ExposureActive";
                camera.f.CounterEventActivation.ValueString = "RisingEdge";
                camera.f.CounterDuration.ValueLong = 2;
                camera.f.CounterResetSource.ValueString = "Counter1End";
                camera.f.CounterResetActivation.ValueString = "RisingEdge";
            }
            // 设置第 i 组定序器的曝光参数
            camera.f.ExposureTime.Value = exposureTimes[i];
            camera.f.SequencerPathSelector.ValueLong = 0;
            if (i < 2)
            {
                camera.f.SequencerTriggerSource.ValueString = "ExposureActive";
                camera.f.SequencerTriggerActivation.ValueString = "RisingEdge";
                camera.f.SequencerSetNext.ValueLong = i + 1;
            }
            else
            {
                camera.f.SequencerTriggerSource.ValueString = "ExposureActive";
                camera.f.SequencerTriggerActivation.ValueString = "RisingEdge";
                camera.f.SequencerSetNext.ValueLong = 0;
            }
            camera.f.SequencerSetSave.Execute();
            // 控制对应光源关闭
            camera.f.LineSelector.ValueString = ioLines[i];
            camera.f.UserOutputValue.ValueBool = false;
        }
        // 定序器参数设置结束
        camera.f.SequencerConfigurationMode.ValueString = "Off";
        // 开启相机定序器功能
        camera.f.SequencerMode.ValueString = "On";
        camera.f.AcquisitionStart.Execute();
        // 这里模拟收到一次硬件触发信号
        Console.WriteLine("Received a hardware trigger signal.");
        // 可以在这里添加回调函数来获取三张不同参数的图像
        // 停止相机定序器功能
        camera.f.AcquisitionStop.Execute();
        camera.f.SequencerMode.ValueString = "Off";
     
}

  

Baumer工业相机使用定序器功能实现一次触发控制三个光源开关分别采集三张图像的优势

使用工业相机的定序器功能进行一次触发实现多种图像采集具有多方面的优势:

  1. 同步性能: 定序器功能允许用户在一次触发下实现多种图像采集,确保各个相机之间的采集动作同步,以保持数据的一致性,有助于进行后续的分析和处理。

  2. 时间精度: 通过定序器功能,可以精确地控制各个相机的采集时序,确保在同一时刻获取不同角度或不同参数的图像,避免时间上的偏差。

  3. 提高效率: 一次触发实现多种图像采集可以减少操作复杂度和时间成本,提高采集效率,尤其在需要同时获取多个视角或条件下的图像时效果显著。

  4. 数据一致性: 通过定序器功能,获得的图像数据在时间上是同步的,这有助于保持数据的一致性和准确性,在实时监控、运动分析等应用中尤为重要。

  5. 灵活性: 定序器功能允许用户根据实际需求自定义不同相机的触发顺序和采集条件,提供了更大的灵活性和可操作性。

总的来说,使用定序器功能进行一次触发实现多种图像采集可提高同步性能、时间精度、效率、数据一致性和灵活性,有助于工业相机在复杂场景下的应用和数据处理。

Baumer工业相机使用定序器功能实现一次触发控制三个光源开关分别采集三张图像的行业应用

工业相机使用定序器功能进行一次触发实现多种图像采集在许多行业中发挥着重要作用。以下是一些典型的行业应用示例:

  1. 制造业: 在制造业中,工业相机经常用于质检、定位和测量。通过定序器功能,可以一次触发相机获取不同角度、光照条件和过滤条件下的图像,以帮助提高产品质量检测的准确性和效率。

  2. 医疗影像: 在医疗影像领域,工业相机的定序器功能可以用于多角度拍摄或同时拍摄不同模态的影像,例如X光片和红外影像,从而为医生提供更全面的影像信息来进行诊断和治疗。

  3. 交通监控: 工业相机在交通监控领域的应用也十分广泛。通过定序器功能,可以实现同时对车辆、行人和交通信号灯等进行多角度、多条件的监控拍摄,以提高交通监控系统的全面性和精度。

  4. 农业领域: 在农业领域,工业相机的定序器功能可用于同时采集植物生长过程中的多种图像信息,如植物生长的速度、形态学特征和病虫害检测等,以实现对植物生长情况的全面监测和分析。

  5. 机器人视觉: 在工业机器人视觉系统中,可以利用定序器功能实现机器人在执行任务时同时获取多种角度的图像,从而帮助机器人更准确地感知周围环境,提高工作效率和精度。

这些行业应用示例表明,工业相机使用定序器功能进行一次触发实现多种图像采集,可为许多行业带来更全面、高效的视觉检测和数据采集解决方案。


http://www.kler.cn/a/546383.html

相关文章:

  • 基础网络详解4--HTTP CookieSession 思考 2
  • S4D480 S4HANA 基于PDF的表单打印
  • FFmpeg中时长的表示方式
  • 论文笔记:Multi-Head Mixture-of-Experts
  • 数据库开发常识(10.6)——考量使用临时表及表连接写法(3)
  • 聊一聊FutureTask源码中体现的“自旋锁”思想
  • 10G EPON光模块
  • 【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)
  • 交叉编译foxy版ros2部署到ARM上运行
  • Linux入侵检查流程
  • filebeat抓取nginx日志
  • Python实现文件夹监控:自动捕获并处理新增Excel文件,支持子文件夹遍历
  • 【Linux】Ubuntu Linux 系统——Node.js 开发环境
  • 利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析
  • 如何查看 Linux 服务器的 MAC 地址:深入解析与实践指南
  • 《图解设计模式》笔记(九)避免浪费
  • 成为高级前端开发师需要掌握的技术
  • 模型过拟合怎么办
  • 力扣动态规划-30【算法学习day.124】
  • 查看notebook的jupyter token