Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)

Baumer工业相机

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


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

Baumer工业相机的实时帧率是工业相机的一个重要参数,因为它影响相机准确捕捉快速移动物体或事件的能力。分辨率、图像质量和可用存储空间等因素也会影响工业相机的帧率。


Baumer工业相机的帧率的技术背景

工业相机的帧率是指相机每秒捕获的单个帧或图像的数量。


帧率越高,意味着摄像机每秒能够捕获更多的图像,从而使视频更流畅、更细腻。


工业相机的帧率取决于各种技术因素,如图像传感器技术、相机的处理速度,以及用于传输数据的连接方法。


图像传感器技术: 摄像机的帧率是由图像传感器读出图像像素数据的速度决定的。与CCD传感器相比,CMOS传感器提供更快的帧率,因为它们可以无损地读出像素。


处理速度:工业相机的帧率会受到相机处理能力的影响。较高的处理速度能使数据读出和传输更快,从而获得更高的帧率。


连接方法: 工业相机的帧率还取决于用于传输数据的连接方法。USB 3.0和千兆以太网提供更快的数据传输率,通常用于工业相机以实现更高的帧率。


总之,工业相机帧率的技术背景由图像传感器技术、处理速度和用于传输数据的连接方法决定。


Baumer工业相机的帧率计算方式

Baumer工业相机帧率的计算方式如下所示:


确定相机的输出格式和分辨率,例如 1920*1080。


然后查找相机的技术规格表,了解它的最大帧速率。最大帧速率是指相机能够捕获的每秒图像帧数的最大值。例如,相机的最大帧速率为 60 帧每秒。


接下来,通过检查相机检测到考虑的接口,从相机中获取图像帧并计算每秒钟传输的帧数。


以通过USB3.0接口连接的标准分辨率相机为例,可以使用以下公式计算帧率:


实时帧数 = 最大帧速率 * 传输带宽利用率


传输带宽利用率 = (像素位深度 * 帧高 * 帧宽 * 实际传输速率) / 8


例如,如果选择了 8 位的像素位深度,相机输出的图像帧大小为 1920x1080 像素,并且实际传输速率为 300 MB/s,则传输带宽利用率为:


(8 * 1080 * 1920 * 300) / 8 = 150.7 MB/s


如果相机的最大帧速率为 60 帧每秒,则实时帧率为:


实时帧数 = 60 * 150.7 / 300 = 30 帧每秒


因此,这个相机在这种配置下的实时帧率为 30 帧每秒。


在BufferEvent声明显示FrameID

在回调函数里声明当前FrameID给予全局变量,C#调用代码如下所示:

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
                }
              }
            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;
ShowFrame_hThread1 = new Thread((ThreadStart)delegate() { SetShowFrame(curDevice); });
                            ShowFrame_hThread1.IsBackground = true;
                            ShowFrame_hThread1.Start();

设计显示帧率的函数

通过计算FrameID的变化计算帧率,每1s重新计算一次


C#核心代码如下所示:

private void SetShowFrame(BGAPI2.Device curDevice)
{
    try
    {
        #region//获取当前相机对应的数据流
        BGAPI2.DataStreamList dsList = curDevice.DataStreams;
        string CursDataStreamID = "";
        foreach (KeyValuePair<string, BGAPI2.DataStream> dst_pair in dsList)
        {
            CursDataStreamID = dst_pair.Key;
        }
        BGAPI2.DataStream mDataStream = dsList[CursDataStreamID];
        #endregion
        bool m_bRun0 = true;
        while (m_bRun0)
        {
            //通过回调函数里的FrameID计算相机帧率并显示
            if (FrameIDInt > 0)
            {
                int CurFrameID1 = FrameIDInt;
                Thread.Sleep(1000);
                int CurFrameID2 = FrameIDInt;
                int CalFrameID = (CurFrameID2 - CurFrameID1) * 1;
                this.CalFrameDisplay.Text = CalFrameID.ToString();
            }
            //通过相机Device数据流信息获取对应网口数据通量并显示出来
            if (pDataStream != null)
            {                        
                double m_CurStreamBitrateFloat = mDataStream.NodeList["Bitrate"].Value;//从相机数据流中获取网口数据通量
                string str_Bitrate = string.Format("{0:f2}", m_CurStreamBitrateFloat);
                this.BitrateDisplay.Text = str_Bitrate + "MBit/s";
            }
        }
    }
    catch (Exception ex1)
    {
        OnNotifyShowRecieveMsg(ex1.Message);
    }
}

测试输出结果如下所示:

11.png


Baumer工业相机通过BGAPI SDK计算帧率的优势

使用带有软件开发工具包(SDK)的工业相机来计算实时帧率有几个优点:


一致、准确的结果: 通过使用SDK,实时帧率可以在不同的系统或应用中准确和一致地计算。


可定制的设置: SDK通常提供广泛的可定制设置,以调整相机设置、图像采集参数和其他影响帧率计算的变量。


高速数据传输: 为高速成像而设计的工业相机通常提供快速的数据传输率,减少延迟并提高计算精度。


多参数监控: 许多SDK使用户能够同时监测多个参数,包括帧率、温度和系统功率使用,确保相机的最佳性能和寿命。


低延时控制: 一个SDK可以实现从远程系统对所有相机功能的低延迟控制,是闭环控制应用的理想选择,如实时检测或运动控制。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
7月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
94 0
|
7月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
61 0
|
7月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
61 0
|
7月前
|
算法 C#
23.c#计算敌人被玩家攻击的剩余血值
23.c#计算敌人被玩家攻击的剩余血值
59 0
|
7月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
259 0
|
7月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
215 3
|
1月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
35 3
|
1天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
26 12
|
1月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
51 4
|
3月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
51 2