Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域(C++)

news2024/11/17 23:48:46

Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域(C++)

  • Baumer工业相机
  • Baumer工业相机BGAPISDK和定序器编程的技术背景
  • Baumer工业相机通过BGAPISDK进行定序器编程功能
    • 1.引用合适的类文件
    • 2.Baumer工业相机通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。
  • Baumer工业相机进行定序器编程功能的优势
  • Baumer工业相机进行定序器编程功能的行业应用

Baumer工业相机

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

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

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

Baumer工业相机BGAPISDK和定序器编程的技术背景

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

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

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

本文介绍的通过集成BGAPI SDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

Baumer工业相机通过BGAPISDK进行定序器编程功能

下面介绍在C++里Baumer工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

1.引用合适的类文件

代码如下(示例):

#include <stdio.h>
#include <iostream>
#include "bgapi2_genicam/bgapi2_genicam.hpp"
using namespace BGAPI2;
#include <iostream>

2.Baumer工业相机通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

本示例将介绍如何通过定序器在图像中将感兴趣区域(ROI)移动到预定位置,以便采集移动物体的重要细节。定序器的每一步操作都通过外部信号触发。这样可以将配置参数进行封装,用户仅传输和处理当前图像分析任务所需的数据。

如图所示为所述序列产生的图像效果。通过在图像中移动感兴趣区域,可直接在相机内对药瓶图像进行虚拟剪裁。

在这里插入图片描述

// STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDevice->GetRemoteNode("UserSetSelector")->SetString("Default");
pDevice->GetRemoteNode("UserSetLoad")->Execute();

// CONFIGURING GPIO “Line0” AS THE TRIGGER INPUT
pDevice->GetRemoteNode("TriggerMode")->SetString("On");
pDevice->GetRemoteNode("TriggerSource")->SetString("Line0");
pDevice->GetRemoteNode("TriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("TriggerDelay")->SetDouble(0.0);
pDevice->GetRemoteNode("LineSelector")->SetString("Line0");
pDevice->GetRemoteNode("LineInverter")->SetBool(false);
pDevice->GetRemoteNode("LineDebouncerHighTimeAbs")->SetDouble(1.0);
pDevice->GetRemoteNode("LineDebouncerLowTimeAbs")->SetDouble(1.0);

// SWITCH TO SEQUENCER CONFIG MODE
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("On");

// SET 0 (FIRST STEP OF THE SEQUENCE)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();

pDevice->GetRemoteNode("TriggerMode")->SetString("On");

// ROI AT TOP LEFT (VGA)
pDevice->GetRemoteNode("OffsetX")->SetInt(0);
pDevice->GetRemoteNode("OffsetY")->SetInt(0);
pDevice->GetRemoteNode("Width")->SetInt(320);
pDevice->GetRemoteNode("Height")->SetInt(240);
pDevice->GetRemoteNode("OffsetX")->SetInt(0);
pDevice->GetRemoteNode("OffsetY")->SetInt(0);

pDevice->GetRemoteNode("SequencerPathSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerSource")->SetString("ExposureActive");
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(1);
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 1 (SECOND STEP OF THE SEQUENCE)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(1);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();

pDevice->GetRemoteNode("TriggerMode")->SetString("On");

// ROI AT CENTER (VGA)
pDevice->GetRemoteNode("OffsetX")->SetInt(0);
pDevice->GetRemoteNode("OffsetY")->SetInt(0);
pDevice->GetRemoteNode("Width")->SetInt(320);
pDevice->GetRemoteNode("Height")->SetInt(240);
pDevice->GetRemoteNode("OffsetX")->SetInt(160);
pDevice->GetRemoteNode("OffsetY")->SetInt(120);

pDevice->GetRemoteNode("SequencerPathSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerSource")->SetString("ExposureActive");
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(2);
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 2 (THIRD STEP OF THE SEQUENCE)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(2);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();

pDevice->GetRemoteNode("TriggerMode")->SetString("On");

// ROI AT BOTTOM RIGHT (VGA)
pDevice->GetRemoteNode("OffsetX")->SetInt(0);
pDevice->GetRemoteNode("OffsetY")->SetInt(0);
pDevice->GetRemoteNode("Width")->SetInt(320);
pDevice->GetRemoteNode("Height")->SetInt(240);
pDevice->GetRemoteNode("OffsetX")->SetInt(320);
pDevice->GetRemoteNode("OffsetY")->SetInt(240);

pDevice->GetRemoteNode("SequencerPathSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerSource")->SetString("ExposureActive");
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(0);

pDevice->GetRemoteNode("SequencerSetSave")->Execute();

pDevice->GetRemoteNode("SequencerSetStart")->SetInt(0);

// SEQUENCER CONFIG END
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("Off");


// START CAMERA SEQUENCER
pDevice->GetRemoteNode("SequencerMode")->SetString("On");
pDataStream->StartAcquisitionContinuous();
pDevice->GetRemoteNode("AcquisitionStart")->Execute();

// WAIT FOR TRIGGERS TO CAPTURE IMAGES WITH CHANGING ROI’S

// STOP CAMERA SEQUENCER
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDataStream->StopAcquisition();
pDevice->GetRemoteNode("SequencerMode")->SetString("Off");

Baumer工业相机进行定序器编程功能的优势

工业相机进行定序器编程功能具有以下优势:

多视角拍摄:通过在一个拍摄周期内自动切换多个不同的视角,可以快速地获取目标物体的各个方向的图像,从而提高图像处理和分析的准确性。

多波长照明切换:在光源有多个波长时,Sequencer 可以实现在不同波长光源之间快速切换,以获得目标物体在不同光泽度和对比度的图像,便于对不同材质或颜色的物体进行图像处理和分析。

参数自动调节:在处理不同类型的物体时,Sequencer 功能可以自动切换到不同的相机参数设置,例如自动调整曝光时间、增益等参数,以提高图像质量。

定时/帧率控制:通过 Sequencer 功能,可以对工业相机的拍摄间隔和帧率进行精确控制,满足不同应用场景下对实时性、稳定性的需求。

节省硬件资源:使用 Sequencer 功能可以减少额外的硬件成本。在多相机系统中,可以仅使用一个相机同时满足多种拍摄需求,从而降低系统成本和复杂度。

异步触发:当需要在拍摄周期内实现不同拍摄任务之间的独立触发时,Sequencer 功能能够满足这种需求,且实现快速切换和精确控制。

Baumer工业相机进行定序器编程功能的行业应用

工业相机进行定序器编程功能在许多行业中都有广泛的应用。以下列举了一些典型的行业应用场景:

制造业:在制造业中,工业相机用于捕捉生产过程中的图像,自动检测生产线上的产品质量、尺寸、颜色等信息,从而实现实时监控和优化工艺流程。典型应用包括自动化装配线、印刷电路板(PCB)检测、钣金检测等。

机器视觉:在机器视觉系统中,工业相机可用于实现目标检测、定位和跟踪等任务。例如,在智能运输系统中,通过对交通信息的实时捕捉和分析,工业相机可以进行道路状况监测、车辆识别和违规行为检测等功能。

医疗行业:工业相机在医疗行业中的应用包括生物显微镜下的细胞分析、体外诊断设备、基因测序仪等。定序器编程功能可以实现对图像采集的自动化和准确性,提高研究和诊断质量。

食品和农业:工业相机可用于食品加工和农业生产中的品质检测、分拣和包装等环节。例如,在果蔬分选中,通过图像识别,可快速筛选出优质食品,保证食品安全和生产质量。

电子及半导体:在电子及半导体行业,工业相机用于监测芯片制造过程中的缺陷,如裂缝、划痕和污染等。通过定序器编程功能,可以实现对工艺过程的实时监控和控制。

能源行业:在太阳能、风能等新能源领域,工业相机可用于监测组件安装和维护过程中的缺陷。此外,它也可以用于智能电网中的故障检测和预防。

安防监控:工业相机在安防监控领域也有广泛应用,如边界防护、人员进出控制、车牌识别等。通过定序器编程功能,可以实现高效、准确的图像捕捉。

这些仅仅是工业相机进行定序器编程功能在各行业中应用的一部随着科技的发展和工业相机技术的成熟,其应用场景将更加广泛,为各行各业的自动化生产提供有效支持。

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

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

相关文章

laravel+vue共用一个域名,使用目录区分接口和项目的nginx配置

1、打包好的项目&#xff1a; 首先将打包好的项目放置public下&#xff0c;如下图 2、nginx配置文件 不带注释的伪静态&#xff08;推荐&#xff09; 备注&#xff1a;若在 location /admin 中的 admin 后面不加 “斜杠/”&#xff0c;则会出现访问 /admin-user 路由&#x…

Oracle Net Services 配置:LISTENER:没有为主机 VM-16-7-centos 返回有效的 IP 地址

问题描述&#xff1a; [rootVM-16-7-centos oracle]# /etc/init.d/oracledb_ORCLCDB-21c configure Configuring Oracle Database ORCLCDB. 准备执行数据库操作 已完成 8% 复制数据库文件 已完成 31% 已完成 100% [FATAL] 正在对命令行参数进行语法分析: 参数"silent&quo…

CLIP论文详细解析

论文链接&#xff1a;Learning Transferable Visual Models From Natural Language Supervision&#xff08;通过自然语言处理的监督信号&#xff0c;学习可迁移的视觉模型&#xff09;. 代码链接&#xff1a;CLIP. CLIP 摘要1.引言2.方法3.实验4.与人对比实验5.数据集去重6.L…

汽车远程启动程序APP的设计与实现(源码+文档+报告+任务书)

以 CAN (Controller Local Network&#xff0c;简称 CAN&#xff09;为基础的车辆遥控起动技术&#xff0c;通过将车辆的 PBD接口与车辆的 CAN总线相连&#xff0c;并与相应的控制系统相连&#xff0c;实现对车辆遥控启动。 此系统主要使用了Java、Android Studio、 MySQL数据…

Visual studio(VS)运行障碍指北

文章目录 VS: ....Microsoft.CppCommon.targets: error MSB6006: “CL.exe”已退出-VS2017许可证过期VS下Visual Assist X番茄插件安装失败子工程引用&#xff08;无法解析的外部符号&#xff09;无法打开.ui文件&#xff08;qt&#xff09;VS中qt子工程无法加载 VS: …Microso…

云原生应用交付平台 Orbit 主要功能与核心能力

GitOps GitOps 于 2017 年首创&#xff0c;是一种管理由 Kubernetes 提供支持的云原生系统的现代方式。它利用策略即代码方法来定义和管理现代应用程序堆栈的每一层——基础设施、网络、应用程序代码和 GitOps 管道本身。Orbit 基于 GitOps 方法理念提供以下能力&#xff1a; …

Revit中用楼板创建散水和批量成板

​一、Revit中用楼板创建散水 在Revit中用楼板来创建散水&#xff0c;散水&#xff1a;散水是指房屋外墙四周的勒脚处(室外地坪上)用片石砌筑或用混凝土浇筑的有一定坡度的散水坡。散水的作用是迅速排走勒脚附近的雨水&#xff0c;避免雨水冲刷或渗透到地基&#xff0c;防止基础…

三、云尚办公-角色管理前端

云尚办公系统&#xff1a;角色管理前端 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&am…

2023-06-27-mimics,slicer软件将.nii.gz转为.ply格式

文章目录 一、前言二、步骤2.1.slicer将.nii.gz格式转为.dcm格式2.1.1导入.nii.gz文件2.1.2.可视化渲染2.1.3.新建一个segmentation2.1.4.添加到segmenation2.1.5.导出为.dcm文件 2.2.Mimics将.dicom导为.ply格式2.2.1.加载.dicom文件2.2.2.调thresholding2.2.3.calculate2.2.4…

基于低代码平台搭建工单系统

一、如何搭建一套工单系统&#xff1f; 本人尝试搭建一个内容部门与其他部门需求对接所使用的应用&#xff0c;有点像内容团队的“临时工单”&#xff0c;来解决目前协同办公软件分工颗粒度过大、跨部门临时需求得不到重视、执行者无法了解任务优先级、领导不好把控进度等问题。…

oracle 过滤字段中的中文,不再洋不洋土不土

目录 前言&#xff1a; 一、知己知彼 1.1业务场景 1.2错误案例 二、思路整理 2.1存储长度与字符串长度比较 三、还有没有其他思路 3.1ascii表查找法 3.2正式案例 四、总结 前言&#xff1a; 随着数字化建设的不断深入&#xff0c;企业越来越注重&#xff0c;企业数据治理&am…

滨海高新区管委会副主任崔同湘一行莅临GBASE南大通用调研

GBASE生态发展部总经理武小钢热情引导崔同湘主任一行参观企业展厅&#xff0c;详细介绍了GBASE专注国产数据库领域二十年的发展历程&#xff0c;汇报公司在研发创新、市场应用、生态建设等方面的成果&#xff0c;崔副主任对GBASE近年来在数据库细分行业的发展和取得的重要成果表…

(二十一)数据符号化——矢量数据符号化①

数据符号化——矢量数据符号化 符号化有两个含义:在地图设计工作中&#xff0c;地图数据的符号化是指利用符号将连续的数据进行分类分级、概括化、抽象化的过程。而在数字地图转换为模拟地图过程中&#xff0c;地图数据的符号化指的是将已处理好的矢量地图数据恢复成连续图形&…

数值优化简介

数值优化这个名字来源于一本书&#xff0c;名为《Numerical Optimization》。 Numerical Optimization这两个单词传递了两个知识领域的概念&#xff1a; Optimization指的是数学概念上的优化&#xff0c;即求最优解&#xff0c;也可以理解为求函数的最小值的解&#xff1b; Num…

【Java高级语法】(二十二)运行时环境访问支持类:API知识总结分享,深入解析Runtime运行时环境访问支持类~

Java高级语法详解之运行时环境访问支持类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 Runtime 类常用方法3.2 使用技巧 4️⃣ 应用场景5️⃣ 业务场景实战5.1 场景一&#xff1a;执行外部脚本5.2 场景二&#xff1a;动态加载类 &#x1f33e; 总结 1️⃣ 概念 Java Runtime 类是…

去面试测试开发你必须要知道的基本知识(建议收藏)

目录 1.对测试开发的理解 2.为什么做测试而不是去做开发 3.如何处理矛盾 4.职业发展 5.你认为测试人员需要具备哪些素质。&#xff08;你有哪些优点围绕这些来说&#xff09; 6.你为什么能够胜任这个岗位 7.测试方法 黑盒测试 白盒测试 8.测试的阶段 9.测试的类型 …

SpringBoot - 集成Quartz框架之常用配置

Quartz是一款Java编写的开源任务调度框架&#xff0c;同时它也是Spring默认的任务调度框架。它的作用其实类似于Java中的Timer定时器以及JUC中的ScheduledExecutorService调度线程池&#xff0c;当然Quartz作为一个独立的任务调度框架无疑在这方面表现的更为出色&#xff0c;功…

四章:FTP详细介绍+winServer2008搭建ftp服务器+winServer2008开启端口

目录 一、FTP介绍 二、FTP服务器架设 三、FTP服务器连接验证 四、winServer2008开启端口 一、FTP介绍 FTP就是文件传输协议。用于互联网双向传输&#xff0c;控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。 我们在工作中经常使用到FTP…

golang,OpenGL,计算机图形学(三)

代码仓库 https://github.com/phprao/go-graphic 颜色 光源照射到物体上&#xff0c;一部分颜色被吸收&#xff0c;另一部分无法吸收的被反射到人眼&#xff0c;于是呈现出了颜色。 当我们把光源的颜色与物体的颜色值相乘&#xff08;而不是点乘&#xff09;&#xff0c;所…

【C语言初阶】带你轻松玩转所有常用操作符最终篇——下标引用、函数调用和结构体成员,表达式求值

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;前几天非常忙没空更新&#xff0c;现在终于闲下来了&#xff0c;这是今天爆肝更新的第二篇&#xff0c;也是我们【C语言初阶】带你轻松玩转所有常用操作符的最后一篇&#xff0c;废话不多说…