Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发多张图像采集功能(C++)

本文主要是介绍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中提供了一种在收到单个触发信号时记录多张图像的方法。。

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工业相机如何通过BGAPISDK进行定序器编程:实现一次触发多张图像采集。

预期的相机动作

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

定序器的工作原理

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

考虑到定序器的基本原理,定序器的参数设置比预想的要复杂得多:

由于第一张图像的采集由硬件触发,随后必须在不同的曝光时间内立即自动采集第二张及更多图像,因此两组不同的定序器必不可少。
第一组定序器(Set0)包含用于配置TriggerMode的必要参数,以及第一张图像的预期曝光时间。
第二组定序器(Set1)将相机重新设置为自由运行操作模式,并对曝光时间及预期/所需计数器数据进行设置。
此外,两组定序器都需要提供定序器组及路径的相关信息。

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

下面介绍在C#里Baumer工业相机如何通过NEOAPI SDK使用定序器实现一次触发多次采集功能

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

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

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

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

1.引用合适的类文件

代码如下(示例):

#include <stdio.h>
#include <iostream>
#include "bgapi2_genicam/bgapi2_genicam.hpp"
#include <iostream>
#include <iostream>
#include "neoapi.hpp"

2.通过NEOAPI SDK开启两组定序器功能

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

NeoAPI::Cam camera = NeoAPI::Cam();
camera.Connect();
camera.f().ExposureTime.Set(10000);int width = static_cast<int>(camera.f().Width);
int height = static_cast<int>(camera.f().Height);if (camera.IsConnected())
{		// 停止相机采集,载入默认参数camera.f().AcquisitionStop.Execute();  camera.f().UserSetSelector.SetString("Default");//选择相机Default设置 camera.f().UserSetLoad.Execute();				//执行Default载入 // 设置第一张图像硬件触发输入参数camera.f().TriggerMode.SetString("On");camera.f().TriggerSource.SetString("Line0");camera.f().TriggerActivation.SetString("RisingEdge");camera.f().TriggerDelay.Set(0.0);camera.f().LineSelector.SetString("Line0");	camera.f().LineInverter.Set("false");camera.f().LineDebouncerHighTimeAbs.Set(1.0); // in µseccamera.f().LineDebouncerLowTimeAbs.Set(1.0); // in µsec// 设置GPIO "Line3"作为输出camera.f().LineSelector.SetString("Line3");camera.f().LineInverter.Set("false");camera.f().UserOutputSelector.SetString("UserOutput1");camera.f().UserOutputValue.Set("false");camera.f().LineSource.SetString("UserOutput1");// 开启定序器设置模式camera.f().SequencerConfigurationMode.SetString("On");// 设置第一组定序器功能Set0camera.f().SequencerSetSelector.Set(1.0);camera.f().SequencerSetLoad.Execute();	//执行第一组定序器参数载入   camera.f().TriggerMode.SetString("On");camera.f().CounterSelector.SetString("Counter1");camera.f().CounterEventSource.SetString("Off");// 设置第一组定序器Set0的曝光参数camera.f().ExposureTime.Set(15000.0);camera.f().SequencerPathSelector.Set(0);camera.f().SequencerTriggerSource.SetString("ExposureActive");camera.f().SequencerTriggerActivation.SetString("RisingEdge");camera.f().SequencerSetNext.Set(1);camera.f().SequencerSetSave.Execute();	//执行第一组定序器参数保存// 设置第二组定序器功能Set1camera.f().SequencerSetSelector.Set(1);camera.f().SequencerSetLoad.Execute();	//开启第二组定序器参数       camera.f().TriggerMode.SetString("Off");camera.f().CounterSelector.SetString("Counter1");camera.f().CounterEventSource.SetString("ExposureActive");camera.f().CounterEventActivation.SetString("RisingEdge");camera.f().CounterDuration.Set(2);camera.f().CounterResetSource.SetString("Counter1End");camera.f().CounterResetActivation.SetString("RisingEdge");// Set ExposureTime for Set1// 设置第二组定序器Set1的曝光参数camera.f().ExposureTime.Set(10000.0);camera.f().SequencerPathSelector.Set(0);camera.f().SequencerTriggerSource.SetString("Counter1End");camera.f().SequencerTriggerActivation.SetString("RisingEdge");camera.f().SequencerSetNext.Set(1);camera.f().SequencerSetSave.Execute();	//执行第二组定序器参数保存camera.f().SequencerSetStart.Set(0);// SEQUENCER CONFIG END// 定序器参数设置结束camera.f().SequencerConfigurationMode.SetString("Off");camera.f.SequencerConfigurationMode.ValueString  =  "Off";// 开启相机定序器功能camera.f().SequencerMode.SetString("On");camera.f().AcquisitionStart.Execute();// 给一次硬件触发信号,可以在回调函数中获取三张不同参数的图像// 停止相机定序器功能camera.f().AcquisitionStop.Execute();  camera.f().SequencerMode.SetString("Off");	}

Baumer工业相机使用定序器功能一次触发实现多种图像采集的优势

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

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

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

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

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

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

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

Baumer工业相机使用定序器功能一次触发实现多种图像采集的行业应用

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

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

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

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

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

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

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

这篇关于Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发多张图像采集功能(C++)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784274

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服