Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来计算相机的实时帧率(C#)
- Baumer工业相机
- Baumer工业相机的帧率的技术背景
- Baumer工业相机的帧率计算方式
- 在BufferEvent声明显示FrameID
- 设计显示帧率的函数
- Baumer工业相机通过BGAPI SDK计算帧率的优势
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);
}
}
测试输出结果如下所示:
Baumer工业相机通过BGAPI SDK计算帧率的优势
使用带有软件开发工具包(SDK)的工业相机来计算实时帧率有几个优点:
-
一致、准确的结果: 通过使用SDK,实时帧率可以在不同的系统或应用中准确和一致地计算。
-
可定制的设置: SDK通常提供广泛的可定制设置,以调整相机设置、图像采集参数和其他影响帧率计算的变量。
-
高速数据传输: 为高速成像而设计的工业相机通常提供快速的数据传输率,减少延迟并提高计算精度。
-
多参数监控: 许多SDK使用户能够同时监测多个参数,包括帧率、温度和系统功率使用,确保相机的最佳性能和寿命。
-
低延时控制: 一个SDK可以实现从远程系统对所有相机功能的低延迟控制,是闭环控制应用的理想选择,如实时检测或运动控制。