Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现根据每次触发信号移动感兴趣区域ROI(C++)
Baumer工业相机
Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。
Baumer工业相机堡盟相机在SDK中提供了一种介绍如何通过定序器在图像中将感兴趣区域(ROI)移动到预定位置,以便采集移动物体的重要细节的方法。
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进行定序器编程:根据每次触发信号移动感兴趣区域。
预期的相机动作
从理论上讲,该方法首先要求相机设置为触发模式,当每次收到触发信号时,根据每次触发信号移动感兴趣区域。
本文将介绍如何通过定序器在图像中将感兴趣区域(ROI)移动到预定位置,以便采集移动物体的重要细节。定序器的每一步操作都通过外部信号触发。这样可以将配置参数进行封装,用户仅传输和处理当前图像分析任务所需的数据。
如需了解有关定序器用途的更多详细信息,请参阅下方的应用说明,其中详细介绍了定序器的工作原理和功能。
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发多张图像采集功能(C++)
测试的图像效果
如图所示为所述序列产生的图像效果。通过在图像中移动感兴趣区域,可直接在相机内对药瓶图像进行虚拟剪裁。
Baumer工业相机通过NEOAPI SDK使用定序器功能移动ROI具体实现方法
下面介绍在C++里Baumer工业相机如何通过NEOAPI SDK使用定序器实现根据每次触发信号移动感兴趣区域ROI。
在收到触发信号后,序列便会开始运行,因此必须将TriggerSource设置为Line0。
1.引用合适的类文件
代码如下(示例):
#include <stdio.h>
#include <iostream>
#include "bgapi2_genicam/bgapi2_genicam.hpp"
#include <iostream>
#include <iostream>
#include "neoapi.hpp"
2.通过NEOAPI SDK开启三组定序器功能实现移动感兴趣区域ROI
Baumer工业相机设置定序器功能模式实现根据每次触发信号移动感兴趣区域ROI核心代码如下所示:
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 µsec
camera.f().LineDebouncerLowTimeAbs.Set(1.0); // in µsec
// 开启定序器设置模式
camera.f().SequencerConfigurationMode.SetString("On");
// 设置第一组定序器功能Set0
camera.f().SequencerSetSelector.Set(0);
camera.f().SequencerSetLoad.Execute(); //执行第一组定序器参数载入
camera.f().TriggerMode.SetString("On");
// 设置左上方的 ROI(VGA)
camera.f().OffsetX.Set(0);
camera.f().OffsetY.Set(0);
camera.f().Width.Set(320);
camera.f().Height.Set(240);
camera.f().OffsetX.Set(0);
camera.f().OffsetY.Set(0);
// 设置第一组定序器Set0的曝光参数
camera.f().ExposureTime.Set(1500.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(); //执行第一组定序器参数保存
// 设置第二组定序器功能Set1
camera.f().SequencerSetSelector.Set(1);
camera.f().SequencerSetLoad.Execute(); //开启第二组定序器参数
camera.f().TriggerMode.SetString("On");
// 设置中心的 ROI(VGA)
camera.f().OffsetX.Set(0);
camera.f().OffsetY.Set(0);
camera.f().Width.Set(320);
camera.f().Height.Set(240);
camera.f().OffsetX.Set(160);
camera.f().OffsetY.Set(120);
// 设置第二组定序器Set1的曝光参数
camera.f().ExposureTime.Set(1000.0);
camera.f().SequencerPathSelector.Set(0);
camera.f().SequencerTriggerSource.SetString("ExposureActive");
camera.f().SequencerTriggerActivation.SetString("RisingEdge");
camera.f().SequencerSetNext.Set(2);
camera.f().SequencerSetSave.Execute(); //执行第二组定序器参数保存
camera.f().SequencerSetStart.Set(0);
// 设置第三组定序器功能Set2
camera.f().SequencerSetSelector.Set(2);
camera.f().SequencerSetLoad.Execute(); //开启第三组定序器参数
camera.f().TriggerMode.SetString("On");
// 设置右下方的 ROI(VGA)
camera.f().OffsetX.Set(0);
camera.f().OffsetY.Set(0);
camera.f().Width.Set(320);
camera.f().Height.Set(240);
camera.f().OffsetX.Set(320);
camera.f().OffsetY.Set(240);
// 设置第三组定序器Set2的曝光参数
camera.f().ExposureTime.Set(1000.0);
camera.f().SequencerPathSelector.Set(0);
camera.f().SequencerTriggerSource.SetString("ExposureActive");
camera.f().SequencerTriggerActivation.SetString("RisingEdge");
camera.f().SequencerSetNext.Set(0);
camera.f().SequencerSetSave.Execute(); //执行第三组定序器参数保存
camera.f().SequencerSetStart.Set(0);
// 定序器参数设置结束
camera.f().SequencerConfigurationMode.SetString("Off");
camera.f.SequencerConfigurationMode.ValueString = "Off";
// 开启相机定序器功能
camera.f().SequencerMode.SetString("On");
camera.f().AcquisitionStart.Execute();
// 通过触发信号,可以用获取根据每次触发信号移动感兴趣区域ROI的图像
// 停止相机定序器功能
camera.f().AcquisitionStop.Execute();
camera.f().SequencerMode.SetString("Off");
}
Baumer工业相机使用定序器根据每次触发信号移动感兴趣区域ROI图像的优势
使用工业相机的定序器功能根据每次触发信号移动感兴趣区域(ROI)图像有以下优势:
-
实时跟踪: 通过定序器功能,相机可以根据触发信号实时移动感兴趣区域,这意味着在连续帧图像中能够准确追踪目标或场景中的感兴趣部分,从而使得监测、分析和控制更加精准和有效。
-
降低数据处理量: 在图像捕捉过程中,移动ROI可以减少图像数据的处理量,仅捕捉和处理感兴趣区域,从而节省计算资源和提高系统的实时性。
-
提高图像质量: 通过移动ROI,可以将焦点集中在目标区域,因此能够提高感兴趣区域的图像清晰度和质量,从而更好地满足特定的分析需要。
-
节省存储空间: 移动ROI可以减少需要存储的图像数据量,进而节省存储空间,这点在对大量图像进行实时处理和存储时尤为重要。
-
适用于动态场景: 在动态场景下,通过移动ROI可以实现对目标的动态追踪,并且保持其在图像中的位置,使得在复杂环境中进行目标监测和分析更加有效。
综上所述,使用工业相机的定序器功能根据每次触发信号移动感兴趣区域(ROI)图像能够提高实时性、准确性和效率,对于许多需要动态目标监测和分析的行业应用具有明显的优势。
Baumer工业相机使用定序器根据每次触发信号移动感兴趣区域ROI图像的行业应用
工业相机使用定序器根据每次触发信号移动感兴趣区域(ROI)图像在许多行业中具有重要应用价值,以下是一些典型的行业应用:
-
自动化制造: 在自动化制造过程中,工业相机可以根据每次触发信号移动ROI图像,从而用于产品定位、零件检测和快速监测,在高速流水线上实现准确而高效的品质控制。
-
医疗影像: 在医疗领域,工业相机的定序器功能可用于实时移动ROI图像,帮助医疗人员精确定位和监测医学影像中的特定结构和病变,有助于诊断和手术支持。
-
交通监控: 在交通监控系统中,工业相机可以根据每次触发信号移动ROI图像,用于快速准确地捕捉车辆、行人或交通违规行为,提高交通监控的精度和效率。
-
智能安防: 工业相机根据每次触发信号移动ROI图像还能应用于智能安全监控系统中,实现对特定区域或目标的精确定位和跟踪,提高安防系统的实时性和反应能力。
-
机器视觉: 在机器视觉领域,工业相机的定序器功能可用于根据每次触发信号移动ROI图像,用于机器人导航、物品识别和智能制造等应用,提高机器视觉系统的灵活性和适用性。
通过工业相机的定序器功能根据每次触发信号移动感兴趣区域(ROI)图像,可以提高图像捕捉的精度和实时性,适用于许多行业中对动态目标的监测、定位和分析的应用场景。