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 µsec
	camera.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");
	


	// 设置第一组定序器功能Set0
	camera.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");
	// 下一个定序器步骤将是下面设置的 Set1
	camera.f().SequencerSetNext.Set(1);
	camera.f().SequencerSetSave.Execute();	//执行第一组定序器参数保存
	
	// 设置第二组定序器功能Set1
	camera.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");
	// 定序器的下一步将再次是Step0
	camera.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. 科学研究: 在科学研究领域,双快门采集可用于快速动态现象的记录和分析,如化学反应过程、生物学事件等,有助于科学实验和研究。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

缩写

解法&#xff1a; 看字符串首元素即可 #include<iostream> #include<vector> #include<string> #include<sstream> using namespace std; #define endl \n void solve() {cin >> ws;string s, str;getline(cin, s);stringstream ss(s);while (…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

11GR2 rac 2节点一键安装演示

Oracle 一键安装脚本&#xff0c;演示 2 节点 RAC 一键安装过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 GRID/ORALCE PSU/OJVM 补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第三代支持 N 节点…

LLVM-3.5 —— 01记,编译 LLVM 3.5.0 clang and clang-query

包括编译&#xff1a;clang clang-tools-extra 0, prepare env sudo apt install llvm sudo apt install clang 使用最新的g 会出错。 1, source code $ git clone --recursive $ cd llvm-project $ git checkout llvmorg-3.5.0 $ cp -r ./clang ./llvm/tools/ $ mkdir llv…

为什localhost被forbidden而127.0.0.1不被绊?

原因&#xff1a; 判段网关的时候判127.0.0.1&#xff0c;所以最好改localhost 其他参考&#xff1a; 【计算机网络】localhost不能访问&#xff0c;127.0.0.1可以访问&#xff1f;_ping localhost和ping 127.0.0.1-CSDN博客

如何关闭 Visual Studio 双击异常高亮

[问题描述]&#xff1a; 最近 Visual Studio 更新后&#xff0c;双击选中关键字快要亮瞎我的眼睛了 &#x1f440;&#x1f440; [解决方法]&#xff1a; 摸索了一下&#xff0c;找到了关闭的方法&#xff1a;工具 → 选项 → 文本编辑器 → 常规&#xff0c;然后取消 勾选 sel…

C#使用MiniExcel读取excel表格文件

使用MiniExcel读取excel表格文件 MiniExecl提供了几种读取方法。 准备测试数据 测试类&#xff1a; public class Person{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public double Value { get; set; }}测试数据…

2023年全球运维大会(GOPS上海站):运维精英齐聚一堂,共探行业新知(附大会核心PPT下载)

随着信息技术的飞速发展&#xff0c;运维作为保障企业信息化系统稳定运行的关键环节&#xff0c;其重要性日益凸显。GOPS 主要面向运维行业的中高端技术人员&#xff0c;包括运维、开发、测试、架构师等群体。目的在于帮助IT技术从业者系统学习了解相关知识体系&#xff0c;让创…

Docker容器化技术(使用Docker搭建论坛)

第一步&#xff1a;删除容器镜像文件 [rootlocalhost ~]# docker rm -f docker ps -aq b09ee6438986 e0fe8ebf3ba1第二步&#xff1a;使用docker拉取数据库 [rootlocalhost ~]# docker run -d --name db mysql:5.7 02a4e5bfffdc81cb6403985fe4cd6acb0c5fab0b19edf9f5b8274783…

RocketMQ—如何解决消息堆积问题

RocketMQ—如何解决消息堆积问题 一般认为单条队列消息差值大于等于10万时&#xff0c;就算消息队列了。 生产者生产速度远远大于消费者消费的速度 我们可以增加消费者数量&#xff0c;但是需要满足消费者数量 小于等于 队列数量。 一般消费方消费消息是IO操作&#xff0c;…

Leetcode 118. 杨辉三角

题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输…

Logstash 详细介绍、安装与使用

目录 1. Logstash 概述2. 工作原理3. 安装和配置1. 安装&#xff08;两种方法&#xff09;2. 测试运行3. 配置输入和输出 4. 使用 Grok 过滤器插件解析 Web 日志5. 使用 Geoip 过滤器插件增强数据6. 配置接收 Beats 的输入 1. Logstash 概述 Logstash 是一个具有实时管道功能的…

手把手教你苹果MacBook电脑清理内存怎么清理?

随着时间的推移&#xff0c;我们的电脑上总会不知不觉地堆积起各种各样的应用和文件。有些应用可能只是一时兴起安装&#xff0c;用过一次之后便束之高阁&#xff1b;有些文件则是工作、学习中产生的&#xff0c;但随着时间的推移已经变得毫无用处。这些不常用的应用和无用文件…

自己写的whoami

一、代码 #include<stdio.h> #include<stdlib.h> #include<proc/readproc.h> int main() {struct PROCTAB *pt;struct proc_t *p;char *cmd;ptmalloc(sizeof(struct PROCTAB));pmalloc(sizeof(struct proc_t));ptopenproc(0x0028);while(readproc(pt,p)!NUL…

C++ :内存管理 newdelete

目录 内存区域划分 C的动态内存的管理方式 new new的基本使用方法 【注意事项】 delete 【注意】 new和delete操作自定义类型 operator new 和 operator delete 【关于自定义类型new申请内存】 【原理】 【调用顺序】 【连续开辟空间问题】 malloc/free和…

数据结构 -- 第1章 绪论

1.1.3 起泡排序 局部有序与整体有序 在由一组整数组成的序列A[0, n - 1]中&#xff0c;满足A[i - 1] ≤ A[i]的相邻元素称作顺序的&#xff1b;否则是逆序的。 有序序列中每一对相邻元素都是顺序的&#xff0c;所有相邻元素均顺序的序列&#xff0c;也必然整体有序。 扫描交…

Profinet转CC-LINK网关功能与配置方法

CC-LINK转Profinet网关&#xff08;XD-PNCR20&#xff09;支持CC-Link系统&#xff0c;采用一种开放式架构的工业现场总线协议&#xff0c;允许不同厂商的设备依此协议进行通信。由于其良好的兼容性&#xff0c;CC-Link广泛使用在在制造产业中的机器控制或程序控制中&#xff0…

第十四届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 特殊日期试题 B: 与或异或试题 C : \mathrm{C}: C: 平均试题 D: 棋盘试题 E : \mathrm{E}: E: 互质数的个数试题 F: 阶乘的和试题 G: 小蓝的旅行计划试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现…

怎么把mp4转换成amv格式?如何下载amv格式视频?

MP4&#xff08;MPEG-4 Part 14&#xff09;是一种通用的视频文件格式&#xff0c;广泛用于多媒体应用。作为MPEG-4标准的一部分&#xff0c;MP4以其卓越的压缩性能、出色的视频质量和广泛的兼容性成为当前最流行的视频格式之一。 AMV文件格式的介绍 AMV文件格式起源于中国公司…

day2-C++

1>自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() 代码&#…