Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C++)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C++)

Baumer工业相机

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


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

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。


Baumer工业相机BGAPISDK和多帧采集模式的技术背景

Baumer工业相机的BGAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。


BGAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。


工业相机的多帧采集模式是指相机能够在短时间内连续采集多帧图像。这种模式在很多应用场景中都非常有用,如快速生产线的检测、高速运动物体的追踪等。根据不同相机类型和传感器,多帧采集模式可以实现场景的高速、高精度、连续捕捉。

以下是一些常见的多帧采集模式:


连续采集模式:相机不间断地采集图像,直到手动停止或达到设定的采集帧数。这种模式适用于对实时连续图像分析的场景,例如监控、运动捕捉等。


触发采集模式:在此模式下,相机仅在接收到外部触发信号时才进行图像采集。这种采集方式可以用于对定时采集具有特定要求的场景,如测量设备、质量检测等。


定时采集模式:这种模式下,相机按照设定的时间间隔进行图像采集。此模式可用于对采样频率有特定要求的应用,比如流水线检测、计时分析等。


固定帧率采集模式:相机按预先设定的帧率进行图像采集。此模式用于对图像帧率有固定要求的实时应用,例如运动分析、视觉跟踪等。


高速采集模式:此模式下,相机在连续采集过程中,会通过降低图像分辨率或进行区域感兴趣(ROI)采集,实现较高的帧率。这种模式常用于对高速运动物体的捕捉和跟踪。


多通道采集模式:此模式又称为多帧缓存模式,在这种模式下,相机会同时采集多个通道,以提高图像处理的速度。例如在立体视觉成像,多个彩色通道(红、绿、蓝)等场景中。


在选择相机的多帧采集模式时,需要根据实际应用场景的需求和相机性能来选择适当的模式。此外,在使用多帧采集模式时,还要考虑图像处理和存储的数据流量,以确保系统能够高效运作。


本文介绍的通过集成BGAPI SDK设置多帧采集模式的功能。


Baumer工业相机通过BGAPISDK设置多帧采集模式功能

下面介绍在C++里Baumer工业相机如何通过BGAPISDK设置多帧采集模式方式


1.引用合适的类文件

代码如下(示例):

#include <stdio.h>
#include <iostream>
#include "bgapi2_genicam/bgapi2_genicam.hpp"
using namespace BGAPI2;
#include <iostream>

2.通过BGAPISDK设置多帧采集模式功能

Baumer工业相机设置多帧采集模式功能核心代码如下所示:

int main()
{
  int returncode = 0;
  int camfound = 0;
  long loopcounter = 0;
  while (true) {
  try
  {
    loopcounter++;
    SystemList* systemList = SystemList::GetInstance();
    systemList->Refresh();
    for (BGAPI2::SystemList::iterator it_s = systemList->begin(); it_s != systemList->end() && camfound == 0; it_s++)
    {
    System* pSystem = it_s->second;  // gige, usb3, ..
    pSystem->Open();
    InterfaceList* interfaceList = pSystem->GetInterfaces();
    interfaceList->Refresh(100);
    for (BGAPI2::InterfaceList::iterator it_i = interfaceList->begin(); it_i != interfaceList->end() && camfound == 0; it_i++)
    {
      Interface* pInterface = it_i->second;
      pInterface->Open();
      DeviceList* deviceList = pInterface->GetDevices();
      deviceList->Refresh(100);
      if (deviceList->size() > 0)
      {
      Device* pDevice = deviceList->begin()->second;
      pDevice->Open();
      std::cout << pDevice->GetModel() << "(" << pDevice->GetSerialNumber() << ")" << " Loop " << loopcounter << std::endl;
      pDevice->GetRemoteNode("TriggerMode")->SetString("Off");
      BGAPI2::String sExposureNodeName = "";
      if (pDevice->GetRemoteNodeList()->GetNodePresent("ExposureTime")) {
        sExposureNodeName = "ExposureTime";
      }
      else if (pDevice->GetRemoteNodeList()->GetNodePresent("ExposureTimeAbs")) {
        sExposureNodeName = "ExposureTimeAbs";
      }
      pDevice->GetRemoteNode(ExposureNodeName)->SetDouble(10000.0);
      //设置相机采集模式为多帧采集模式
      pDevice->GetRemoteNode("AcquisitionMode")->SetString("MultiFrame");
        //set 'AcquisitionFrameCount' to 100
      pDevice->GetRemoteNode("AcquisitionFrameCount")->SetValue(100);
      DataStreamList* datastreamList = pDevice->GetDataStreams();
      datastreamList->Refresh();
      DataStream* pDataStream = datastreamList->begin()->second;
      pDataStream->Open();
      BGAPI2::BufferList* bufferList = pDataStream->GetBufferList();
      Buffer* pBuffer = NULL;
      for (int i = 0; i < 4; i++)
      {
        pBuffer = new BGAPI2::Buffer();
        bufferList->Add(pBuffer);
        pBuffer->QueueBuffer();
      }
      pDataStream->StartAcquisitionContinuous();
      pDevice->GetRemoteNode("AcquisitionStart")->Execute();
      Buffer* pBufferFilled = NULL;
                                                for (int i = 0; i < 5; i++)
      //for (int i = 0; i < 200; i++)
      {
        pBufferFilled = pDataStream->GetFilledBuffer(1000);
        if (pBufferFilled == NULL) { std::cout << "Error: Buffer Timeout after 1000 msec" << std::endl; }
        else if (pBufferFilled->GetIsIncomplete() == true) { std::cout << "Error: Image is incomplete" << std::endl; pBufferFilled->QueueBuffer(); }
        else { std::cout << " 670.cpp" << " Image " << pBufferFilled->GetFrameID() << " Timestamp " << pBufferFilled->GetTimestamp() << std::endl; pBufferFilled->QueueBuffer(); }
      }
      if (pDevice->GetRemoteNodeList()->GetNodePresent("AcquisitionAbort")) {
        pDevice->GetRemoteNode("AcquisitionAbort")->Execute();
      }
      pDevice->GetRemoteNode("AcquisitionStop")->Execute();
      pDataStream->StopAcquisition();
      bufferList->DiscardAllBuffers();
      while (bufferList->size() > 0)
      {
        pBuffer = bufferList->begin()->second;
        bufferList->RevokeBuffer(pBuffer);
        delete pBuffer;
      }
      pDataStream->Close();
      pDevice->Close();
      deviceList->Refresh(100);
      camfound = 1;
      }
      pInterface->Close();
    }
    pSystem->Close();
    }
    if (camfound == 0) {
    std::cout << "no camera found on any system or interface." << std::endl;
    }
    camfound = 0;
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
    returncode = (returncode == 0) ? 1 : returncode;
    std::cout << "Error in function: " << ex.GetFunctionName() << std::endl << "Error description: " << ex.GetErrorDescription() << std::endl << std::endl;
  }
  BGAPI2::SystemList::ReleaseInstance();
  }
  std::cout << "Input any number to close the program '670_Loop_SystemList_GetFilledBuffer.cpp':";
  int endKey = 0;
  std::cin >> endKey;
  return returncode;
}

第一次呈现效果如下所示:

每次连接工业相机执行:mDevice.RemoteNodeList[“AcquisitionStart”].Execute();

工业相机将会按照设定采集100张图像后停止,FrameID将会增加100左右,如下图所示:

22.png


第二次呈现效果如下所示:

FrameID将会增加100左右

11.png


Baumer工业相机循设置多帧采集模式功能的优势

工业相机的多帧采集模式具有很多优势,可以满足各种工业应用场景的需求。以下是一些主要的优势:


提高图像采集速率:多帧采集模式允许在短时间内连续捕获多个图像,从而提高图像采集的速率和效率。这在许多需要高速处理的应用场景中尤为重要,例如质量检测、工件定位等。


提高图像处理性能:通过将采集到的图像数据保存在缓存中,多帧采集模式可以确保相机在实时处理数据时不受CPU速度的限制。这样的设计可以保证系统在进行实时分析时具有较高的图像处理性能。


灵活满足工业应用需求:多帧采集模式具有多种采集方式,可以根据实际应用场景的需求选择合适的模式。例如,在追踪高速运动物体时,可以选择高速采集模式;而需要实时处理和分析图像时,可以选择连续采集模式。


确保高精度和稳定性:在诸如测量设备、质量检测等应用场景中,触发采集模式可以确保相机只在接收到外部触发信号时才捕获图像。这样可以确保图像采集的精确性和稳定性,提高整个系统的性能。


实现同步和异步采集:一些多帧采集模式允许相机在同步和异步模式下工作。这意味着在需要同时采集多个通道数据的场景中,可以保证多个通道之间的同步性,提高图像处理的效率和精度。


提高数据传输效率:多帧采集模式可以减少图像数据传输的开销,特别是对于高速、高分辨率的图像数据。例如,在高速采集模式下,通过降低图像分辨率或采集感兴趣区域(ROI)可以大幅降低数据传输的负担。


总之,工业相机的多帧采集模式有助于提高图像采集速率、处理性能、精度和稳定性等方面的性能,能更好地满足各种工业应用场景的需求。


Baumer工业相机设置多帧采集模式功能的行业应用

工业相机的多帧采集模式具有很多优势,可以满足各种工业应用场景的需求。以下是一些主要的优势:


提高图像采集速率:多帧采集模式允许在短时间内连续捕获多个图像,从而提高图像采集的速率和效率。这在许多需要高速处理的应用场景中尤为重要,例如质量检测、工件定位等。


提高图像处理性能:通过将采集到的图像数据保存在缓存中,多帧采集模式可以确保相机在实时处理数据时不受CPU速度的限制。这样的设计可以保证系统在进行实时分析时具有较高的图像处理性能。


灵活满足工业应用需求:多帧采集模式具有多种采集方式,可以根据实际应用场景的需求选择合适的模式。例如,在追踪高速运动物体时,可以选择高速采集模式;而需要实时处理和分析图像时,可以选择连续采集模式。


确保高精度和稳定性:在诸如测量设备、质量检测等应用场景中,触发采集模式可以确保相机只在接收到外部触发信号时才捕获图像。这样可以确保图像采集的精确性和稳定性,提高整个系统的性能。


实现同步和异步采集:一些多帧采集模式允许相机在同步和异步模式下工作。这意味着在需要同时采集多个通道数据的场景中,可以保证多个通道之间的同步性,提高图像处理的效率和精度。


提高数据传输效率:多帧采集模式可以减少图像数据传输的开销,特别是对于高速、高分辨率的图像数据。例如,在高速采集模式下,通过降低图像分辨率或采集感兴趣区域(ROI)可以大幅降低数据传输的负担。


总之,工业相机的多帧采集模式有助于提高图像采集速率、处理性能、精度和稳定性等方面的性能,能更好地满足各种工业应用场景的需求。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
5天前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
33 0
|
5天前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
52 0
|
5天前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
36 0
|
5天前
|
存储 缓存 调度
C++医院医学影像PACS系统源码 影像采集 DICOM影像
支持对财务及工作量信息进行统计; 支持对任意的检查类别,检查设备按照不同的检查项目(包括送检医生,送检;科室,检查类别,报告医生工作量等)进行任意时间段的统计; 可以按照检查类型,检查设备,检查项目,统计范围和日期范围等进行组合统计。
20 1
|
5天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
19 0
|
5天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
21 1
|
3天前
|
测试技术 C++
C++|运算符重载(3)|日期类的计算
C++|运算符重载(3)|日期类的计算
|
5天前
|
C语言 C++ 容器
C++ string类
C++ string类
9 0
|
5天前
|
C++ Linux