Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(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工业相机如何通过NEOAPI进行定序器编程:借助双快门,可在较短的时间间隔内采集两张曝光时间非常短的图像。

预期的相机动作

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

技术限制

双快门方法要使用闪光灯,因此在采集每张图像时都需要闪光,这样环境光将被抑制。

图像曝光时间非常短”意味着设定的曝光时间和相机内部处理时间比传感器的读取时间短。在此,设定的第二次曝光时间应大于等于传感器的读取时间。

为了避免传感器的读取时间超过第二次曝光时间,需要再进行一次短促的闪光,同时必须避免所有环境光。

定序器的工作原理

考虑到定序器的基本原理以及双快门的技术限制,定序器的参数设置比预想的要复杂得多:

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

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

下面介绍在C++里Baumer工业相机如何通过NEOAPI SDK使用定序器实现双快门采集两张曝光时间非常短的图像.

在收到触发信号后,序列便会开始运行,因此必须将TriggerSource设置为Line0。

第一组定序器

Set0提供由定序器控制的相机功能:ExposureTime和已开启的TriggerMode。

定序器组及路径相关功能:

SequencerPathSelector = 0
对切换至下一组定序器的路径进行定义,本例中为Path0。

SequencerTriggerSource = ExposureActive
对用作定序器触发源的内部或外部信号进行定义,本例中为内部信号ExposureActive。

SequencerTriggerActivation = RisingEdge
对触发切换至下一组定序器的信号状态变化进行定义,本例中为RisingEdge。

SequencerSetNext = 1
定义本路径中的下一组定序器,本例中为Set1。

第二组定序器

Set1中的ExposureTime更长,并关闭了TriggerMode。该组定序器及路径相关功能:

SequencerPathSelector = 0
对切换至下一组定序器的路径进行定义,使用Path0返回至Set0。

SequencerTriggerSource = ExposureActive
对用作定序器触发源的内部或外部信号进行定义,本例中为内部信号ExposureActive。

SequencerTriggerActivation = RisingEdge
对触发切定序器组切换的信号状态变化进行定义,本例中为RisingEdge。

SequencerSetNext = 0
定义相关路径中的下一组定序器。使用Set0返回。

本示例介绍了如何通过硬件触发实现双快门操作的定序器编程。双快门操作旨在在很短的时间内采集2张图像。该操作使用了一种特殊的技术,让相机还在读取第一张图像的时候可以采集第二张图像。

下图所示为以信号曲线表示的双快门效果:在第二次曝光的最终阶段消除外界光(曝光信号中的灰色阴影区域),可确保相机实现预期动作。

在这里插入图片描述

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// 为闪光灯配置计时器// 每次开始曝光时启动计时器,持续时间为 100 微秒camera.f().TimerSelector.SetString("Timer1");camera.f().TimerTriggerSource.SetString("ExposureStart");camera.f().TimerTriggerActivation.SetString("RisingEdge");camera.f().TimerDelay.Set(0.0);// (闪光灯的)定时器持续时间等于下面的 Set0 曝光时间camera.f().TimerDuration.Set(100.0);// 配置 GPIO "线路 3",用于控制闪存camera.f().LineSelector.SetString("Line3");camera.f().LineSource.ValueString.SetString("Timer1Active");// 当之前设置的定时器 1 工作时,3 号线为高电平camera.f().LineInverter.Set("false");	// 切换到定序器设置模式	camera.f().SequencerConfigurationMode.SetString("On");// 设置第一组定序器功能Set0camera.f().SequencerSetSelector.Set(0);camera.f().SequencerSetLoad.Execute();	//执行第一组定序器参数载入   // 设置第一组定序器Set0的曝光参数// Set0 的曝光时间 =(闪光灯的)定时器持续时间camera.f().ExposureTime.Set(100.0);		camera.f().SequencerPathSelector.Set(0);camera.f().SequencerTriggerSource.SetString("ExposureActive");camera.f().SequencerTriggerActivation.SetString("RisingEdge");// 下一个定序器步骤将是下面设置的 Set1camera.f().SequencerSetNext.Set(1);camera.f().SequencerSetSave.Execute();	//执行第一组定序器参数保存// 设置第二组定序器功能Set1camera.f().SequencerSetSelector.Set(1);camera.f().SequencerSetLoad.Execute();	//开启第二组定序器参数    // 将触发模式(TriggerMode)设置为关,否则相机将等待下一次硬件触发,这是不可取的。将触发模式(TriggerMode)更改为关(Off)将使摄像机返回自由运行模式,曝光一次后,我们将回到设置 0,此时触发模式(TriggerMode)将再次打开,以便相机等待下一次硬件触发。   camera.f().TriggerMode.SetString("Off");// 这里是双快门技巧,对于第二次曝光,我们将曝光时间设置为 // 与第一幅图像的读出时间相同(由相机计算得出)。这样 // 相机将识别到,只有在第一幅图像的读出时间结束后,第二幅图像才可以读出。// 第一幅图像的读出完成后,第二幅图像才可以读出,因此会立即开始曝光。// 而不是等待第一幅图像完成读出// 设置第二组定序器Set1的曝光参数double fReadOutTime_Set1 = (double )camera.f().ReadOutTime.Get();   camera.f().ExposureTime.Set(fReadOutTime_Set1 );camera.f().SequencerPathSelector.Set(0);camera.f().SequencerTriggerSource.SetString("ExposureActive");camera.f().SequencerTriggerActivation.SetString("RisingEdge");// 定序器的下一步将再次是Step0camera.f().SequencerSetNext.Set(0);camera.f().SequencerSetSave.Execute();	//执行第二组定序器参数保存// 从 Set0 开始camera.f().SequencerSetStart.Set(0);// 定序器参数设置结束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. 机器视觉: 工业相机的双快门采集可应用于机器视觉系统中,对运动中的物体进行高速拍摄和分析,用于自动化生产、无人驾驶车辆和智能机器人等应用。

  3. 医疗影像: 在医学影像领域,双快门采集可用于捕捉活体器官、血流等的快速变化图像,有助于医学影像诊断和手术支持。

  4. 军事与航空航天: 在军事和航空航天领域,工业相机的双快门采集可用于高速飞行器、导弹、火箭等的图像捕捉和分析,有助于飞行器性能测试和目标跟踪等应用。

  5. 科学研究: 在科学研究领域,双快门采集可用于快速动态现象的记录和分析,如化学反应过程、生物学事件等,有助于科学实验和研究。

通过工业相机的定序器实现双快门采集两张曝光时间非常短的图像,可以满足许多行业对高速运动和瞬时事件的图像捕捉需求,为各种应用提供了高速、精度和数据多样性的图像采集解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁将主导未来AI市场?Claude3、Gemini、Sora与GPT-4的技术比拼

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

软件设计师:06-程序设计语言与语言处理程序基础

章节章节01-计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - 面向对象05 - 数据结构与算法11 - 结构化开发与UML06 - 程序设计语言与语言处理程序基础12 - 下午题历年真题End -…

扒带和扒谱的区别 FL Studio怎么扒带 扒带编曲制作 扒带简单歌曲

在许多业余音乐爱好者们的眼里&#xff0c;扒带和扒谱是同一种东西。诚然&#xff0c;扒带和扒谱的确非常相似&#xff0c;但是从严格的意义上来说&#xff0c;这二者还是有一定的区别。今天我们就来说一说扒带和扒谱的区别&#xff0c;FL Studio怎么扒带。 FL Studio21中文官网…

Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…

【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

一、绘制初始图像 正常使用plt进行绘图&#xff0c;这里举例一个正弦函数&#xff1a; 二、绘制动态图的每一帧 思路&#xff1a; 根据横坐标点数绘制每一帧画面每次在当前坐标处&#xff0c;绘制一个点和垂直的线&#xff0c;来表示当前点可以在点上加个坐标等样式来增加…

新火种AI|GPT-4诞生1年,OpenAI把它放到了机器人上

作者&#xff1a;一号 编辑&#xff1a;美美 ChatGPT拥有了身体&#xff0c;机器人也有了灵魂。 从OpenAI在去年3月14日拿出GPT-4后&#xff0c;已经过了整整一年。显然&#xff0c;在GPT-4诞生之后的这一年&#xff0c;一切都迭代得太快了&#xff0c;从GPT-4展现多模态能力&…

力扣热题100_矩阵_73_矩阵置零

文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

SpringCloud微服务 黑马教程 自我总结笔记

来源出处&#xff1a; SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from333.337.search-card.all.click 一、认识微服务 微服…

BEV系列一:BEV介绍和常用BEV算法简介

BEV系列一&#xff1a;BEV介绍和常用BEV算法简介 自动驾驶最全学习资料获取&#xff1a;链接

学生时期学习资源同步-1 第一学期结业考试题6

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载

高效Go编程: encoding/csv标准库深度解析

高效Go编程: encoding/csv标准库深度解析 引言了解encoding/csv库CSV文件的基本结构encoding/csv库的核心功能应用场景 读取CSV文件基本步骤代码示例处理不同的分隔符错误处理 处理CSV数据数据解析代码示例处理不规则数据代码示例 写入CSV文件基本步骤代码示例自定义设置错误处…

群发邮件软件哪个好?8款国际流行软件推荐与评测

无论是小型企业还是大型企业&#xff0c;都需要一个高效、稳定且功能全面的群发邮件软件来完成营销任务。市场上的群发邮件软件琳琅满目&#xff0c;如Zoho Campaigns、Constant Contact、Intuit Mailchimp、Moosend、MailerLite、Systeme.io、Instantly、Saleshandy等&#xf…