Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取每张图像的微秒时间和FrameID(C#)

news2024/11/28 22:42:33

BGAPI SDK获取图像微秒级时间和FrameID

  • Baumer工业相机
  • Baumer工业相机FrameID技术背景
  • 一、FrameID是什么?
  • 二、使用BGAPI SDK获取图像微秒时间和FrameID步骤
    • 1.获取SDK图像微秒级时间
    • 2.获取SDK图像FrameID
  • Baumer工业相机使用微秒级时间和FrameID保存的用处
  • Baumer工业相机使用微秒级时间和FrameID保存的行业应用


Baumer工业相机

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

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

Baumer工业相机中在一些需要同步的工业相机应用中,时间戳的准确性至关重要。BGAPI SDK可以提供一个精确的时钟源,以同步多个相机机并确保准确的时间戳。尤其是FrameID可以用于跟踪和识别每一帧,以便进行分析、处理或储存。


Baumer工业相机精确获取图像时间和FrameID技术背景

若要获取工业相机SDK获取图像的微秒时间和FrameID,通常需要一个支持硬件触发的相机和一个允许你访问时间戳和FrameID信息的软件API。

1. 硬件触发: 许多工业相机支持硬件触发,这允许你将相机的采集与外部触发信号同步。这可以帮助确保在你需要的确切时刻捕获图像,并将延迟或抖动降到最低。

2. 时间标记: 当图像被采集时,相机的硬件或软件通常会记录一个时间戳,表明曝光开始或结束的时间。这个时间戳可以用来计算捕获图像的精确时间。

3.FrameID:随着时间戳的出现,相机也可能为每一帧被捕获的图像分配一个独特的标识符。这可以帮助你跟踪哪些图像是按顺序拍摄的,特别是在你以高帧率获取图像时。

4. SDK API: 为了访问工业相机的时间戳和帧ID信息,你通常会使用相机制造商提供的SDK API。此API可能允许你设置摄像机的硬件触发,指定时间戳和帧ID的格式,并检索数据


一、工业相机FrameID是什么?

工业相机的帧标识(Frame Identifier)是分配给相机拍摄的每一帧或图像的唯一标识。

它用于跟踪和识别每一帧,以便进行分析、处理或储存。帧标识通常包括帧号、采集日期和时间、相机识别号和其他相关元数据等信息。

二、使用BGAPI SDK获取图像微秒时间和FrameID

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGAPI2;
using System.Runtime.InteropServices;
using System.IO;
using CSCameraDemo.Properties;
using System.Globalization;
using WindowsFormsApplication1;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing.Imaging;


2.获取SDK图像FrameID和微秒级别时间

代码如下(示例):

// 获取系统时间,精确到毫秒
string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
#region//获取当前FrameID
FrameIDInt = (int)mBufferFilled.FrameID;
OnNotifySetFrameID(FrameIDInt.ToString());
#endregion

3.BGAPI SDK在图像回调中获取微秒级和FrameID信息保存图像

代码如下(示例):

void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
        {
            try
            {
                BGAPI2.Buffer mBufferFilled = null;              
                mBufferFilled = mDSEvent.BufferObj;
                if (mBufferFilled == null)
                {
                    MessageBox.Show("Error: Buffer Timeout after 1000 ms!");
                }
                else if (mBufferFilled.IsIncomplete == true)
                {
                    //MessageBox.Show("Error: Image is incomplete!");
                    //queue buffer again
                    mBufferFilled.QueueBuffer();
                }
                else
                {
                    #region//获取当前FrameID
                    FrameIDInt = (int)mBufferFilled.FrameID;
                    OnNotifySetFrameID(FrameIDInt.ToString());
                    #endregion

                    //将相机内部图像内存数据转为bitmap数据
                    System.Drawing.Bitmap bitmap  = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width,
                       System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));
                                      
                    #region//Mono图像数据转换。彩色图像数据转换于此不同
                    System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
                    int nColors = 256;
                    for (int ix = 0; ix < nColors; ix++)
                    {
                        uint Alpha = 0xFF;
                        uint Intensity = (uint)(ix * 0xFF / (nColors - 1));
                        palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);
                    }
                    bitmap.Palette = palette;
                    #endregion


                    //回调函数保存图像功能
                    if (bSaveImg)
                    {
                        //使用bitmap自带函数保存
                        string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                        string saveimagepath = pImgFileDir + "\\" + strtime +"-" +FrameIDInt +".jpg";
                        bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);                   
                        bSaveImg = false;//变量控制单次保存图像
                    }

                    #region//bitmap的图像数据复制pBitmap
                    Bitmap clonebitmap = (Bitmap)bitmap.Clone();
                    BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);
                    clonebitmap.UnlockBits(data);
                    pBitmap = clonebitmap;
                    #endregion
                    #region//将pBitmap图像数据显示在UI界面PictureBox控件上
                    prcSource.X = 0;prcSource.Y = 0;
                    prcSource.Width = (int)mBufferFilled.Width;prcSource.Height = (int)mBufferFilled.Height;
                    System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);
                    graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);
                    #endregion

                    clonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间
                    mBufferFilled.QueueBuffer();

                }
            }
            catch (BGAPI2.Exceptions.IException ex)
            {
                {
                    string str2;
                    str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
                    MessageBox.Show(str2);
                }
            }
            return;
        }

Baumer工业相机图像使用微秒级时间和FrameID保存效果


工业相机图像使用微秒级时间和FrameID的用处

使用微秒计时和FrameID的工业相机图像可用于各种目的,如:

1. 测量高速运动或快速移动的物体 - 微秒计时和FrameID可以精确测量运动的持续时间和速度。

2. 制造过程中的质量控制和检查 - 工业相机拍摄的高分辨率图像可用于缺陷检测、表面检查和产品验证。

3. 科学和工程领域的研究和开发 - 具有微秒级计时和FrameID的工业相机可以高速捕捉数据,为科学研究和工程实验提供精确的测量。

4. 交通监测和监控 - 工业相机可以高速和准确地捕捉移动的车辆、行人和其他物体的图像,使其适合用于交通监测和监控。

5. 体育分析和性能测量 - 工业相机上的微秒计时和FrameID可用于实时捕捉和分析运动员或体育设备的运动,为训练和优化提供宝贵的见解。

总的来说,带有微秒计时和FrameID的工业相机是精密测量、质量控制、科学研究以及在各种行业和应用中进行实时监测和分析的宝贵工具。


工业相机图像使用微秒时间和FrameID的行业应用

在工业相机图像中使用微秒时间和FrameID可以有各种行业应用,包括:

1. 制造业: 工业相机图像可用于监测和分析生产线,使制造商能够提高效率,减少缺陷,并提高整体生产力。微秒时间和FrameID的使用可以帮助跟踪特定组件或装配的进展,并确定潜在的问题或瓶颈。

2. 质量控制:高速工业相机能够以非常高的帧率捕捉图像,从而能够精确检查产品和部件的缺陷或异常。微秒级时间和FrameID的使用可以帮助确保准确和一致的测量和检查结果。

3. 医学成像: 高速工业相机可用于医疗成像应用,如超声、内窥镜和显微镜。高帧率和精确的图像时间可以使临床医生捕捉到动态过程的详细图像,并确定组织或细胞行为的微妙变化。

4. 航空航天和国防:工业相机图像可用于监测和分析航空航天和国防应用中的复杂系统,如飞机发动机、导弹制导系统和卫星部件。微秒级时间和FrameID的使用可以帮助实时识别潜在的故障或性能问题。

总的来说,在工业相机图像中使用微秒级时间和FrameID可以在各行业中实现广泛的应用,为分析和决策提供精确和可靠的数据。

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

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

相关文章

深度理解Vuex的用法及实例讲解

背景&#xff1a; 在项目里面写一个公共的方法&#xff0c;只要有需要的table的column需要变色就直接调用这个方法就好了&#xff0c;不需要在自己的子页面写方法。 如下图&#xff0c;写一个column变色的公共方法。 源代码&#xff1a; 下面的源代码将以上面背景需求为例子…

HTTP协议状态码大全 | 汇总HTTP所有状态码

&#x1f50a; HTTP 状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含 HTTP 状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 HTTP…

统计软件与数据分析Lesson8----HTML初识

统计软件与数据分析Lesson8----HTML初识1.什么是 HTML&#xff1f;2.查看HTML源代码3.HTML 标签4.HTML 文档5.编写 HTML6.HTML 标签6.1 HTML 标题6.2 HTML 段落6.3 HTML 链接7.HTML 元素7.1HTML 嵌套元素7.2 HTML空元素8.HTML 属性9. HTML <div> 元素10.其它10.1 HTML 水…

七、网络安全

&#xff08;一&#xff09;网络安全设计 1、网络安全体系设计 &#xff08;1&#xff09;物理安全 通信线路的可靠性、硬软件设备的安全性、设备的备份、防灾害防干扰能力、设备的运行环境、不间断电源 eg机房安全 &#xff08;2&#xff09;系统安全 操作系统本身的缺陷…

MySQL数据库,表的增删改查详细讲解

目录 1.CRUD 2.增加数据 2.1创建数据 2.2插入数据 2.2.1单行插入 2.2.2多行插入 3.查找数据 3.1全列查询 3.2指定列查询 3.3查询字段为表达式 3.3.1表达式不包含字段 3.3.2表达式包含一个字段 3.3.3表达式包含多个字段 3.4起别名 3.5distinct(去重) 3.6order …

如何恢复回收站?数据恢复,这4招就够了!

案例&#xff1a;恢复回收站 【谁能帮帮我这个电脑小白呀&#xff1f;回收站里的文件被删除了还能恢复吗&#xff1f;怎么恢复回收站文件呢&#xff1f;求解答&#xff01;】 电脑的回收站给我们带来了很多的便利&#xff0c;我们可以将删除的数据放入回收站&#xff0c;也可…

OnnxRuntime----Lite-Mono单目深度估计ONNX推理

题目要求&#xff1a;学习了解单目深度估计模型Lite-Mono&#xff0c;根据上篇VSCode配置之OnnxRuntime(CPU) && YOLOv7验证&#xff0c;实现深度估计模型Lite-Mono推理&#xff0c;并集成到现有ONNX系列模型中。 Lite-Mono论文&#xff1a;Lite-Mono:A Lightweight CN…

运算放大器的内部结构-运放

运算放大器的内部结构 算放大器的内部电路&#xff0c;对于使用者在遭遇应用上的极限而导致无法达成系统设计规格时&#xff0c;非常有帮助。而虽然各家厂商推出的运算放大器性能与规格互有差异&#xff0c;但是一般而言标准的运算放大器都包含下列三个部分&#xff1a; 差动…

走进小程序【一】什么是小程序?

文章目录&#x1f31f;前言&#x1f31f;发展史&#x1f31f;什么是[微信小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/)&#xff1f;&#x1f31f;微信小程序能做什么&#xff1f;&#x1f31f;小程序发展前景和优势&#x1f31f;写在最后&#x1f31…

ROS1学习笔记:launch启动文件的使用方法

参考B站古月居ROS入门21讲&#xff1a;launch启动文件的使用方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、launch的文件结构二、launch的文件语法2.1 根元素2.2 参数设置2.3 重映射和嵌套三、相关示例simple.launchturtlesim_parameter_config.launchstart_tf_d…

SpringBoot 整合 JSP和MyBatis

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【满血Buff】ChatGPT科普篇,三段式介绍,内含各种高效率插件

【满血Buff】ChatGPT科普篇&#xff0c;三段式介绍&#xff0c;内含各种高效率插件1、ChatGPT是什么2、为什么要掌握ChatGPT效能工具3、ChatGPT能做什么4、和ChatGPT相关的谷歌插件4.1 WebChatGPT4.2 OpenAI Ttanslator 翻译4.3 ChatGPT for Google本篇博客采用三段论的叙事方式…

Redis Cluster详解

文章目录集群设计目标Redis 集群协议中的客户端和服务器角色写入安全可用性(Availability)性能(Performance)避免合并(merge)操作主要模块介绍哈希槽(Hash Slot)Keys hash tagsCluster nodes属性Cluster总线集群拓扑节点握手请求重定向Moved 重定向ASK 重定向smart客户端状态检…

基于Tensorflow搭建卷积神经网络CNN(新冠肺炎医学图像识别)保姆及级教程

项目介绍 TensorFlow2.X 搭建卷积神经网络&#xff08;CNN&#xff09;&#xff0c;实现人脸识别&#xff08;可以识别自己的人脸哦&#xff01;&#xff09;。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠&#xff0c;然后经过全连接层&#xff0c;最后用softm…

物理世界的互动之旅:Matter.js入门指南

theme: smartblue 本文简介 戴尬猴&#xff0c;我是德育处主任 欢迎来到《物理世界的互动之旅&#xff1a;Matter.js入门指南》。 本文将带您探索 Matter.js&#xff0c;一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念&#xff0c;包括引擎、世界…

【Jetpack】DataBinding 架构组件 ③ ( 使用 include 导入二级界面布局 | 二级页面绑定数据模型 )

文章目录一、使用 include 导入二级界面布局二、二级页面绑定数据模型1、将二级界面布局转为 DataBinding 布局2、在主布局中为二级界面布局传递数据模型三、核心代码示例1、主布局2、子布局3、Java 代码4、执行结果一、使用 include 导入二级界面布局 如果在 DataBinding 布局…

C++之深入解析虚函数表的实现及其内存布局

一、虚函数表概述 C 中的虚函数的作用主要是实现了多态的机制&#xff0c;关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数&#xff1a; Derive d; Base1 *b1 &d; Base2 *b2 &d; Base3 *b…

使用自己修改的特制舵机,支持关节角度回传的桌面级小机器工具人

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。

c++小知识

1、一般头文件&#xff1a; #include<iostream> using namespace std; 2、ios::sync_with_stdio(false); 其含义是取消cin与stdin的同步&#xff0c;cout和stdout的同步 cin.tie(0); tie是将两个stream绑定的函数&#xff0c;空参数的话返回当前的输出流指针。 3、…

从零开始搭建性能完备的网站-思路过程(1)

之前前端的一揽子技术基本都学完了&#xff0c;除了react和uniapp这些想做大前端需要学的东西&#xff0c;基本vue相关的东西都学过了&#xff0c;本来想做尚硅谷的后台项目&#xff0c;可是它使用的工具库实在是太老了&#xff0c;所以直接跳到自己搭建网站这一步来&#xff0…