Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
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设置多帧采集模式的功能。
下面介绍在C++里Baumer工业相机如何通过BGAPISDK设置多帧采集模式方式
代码如下(示例):
#include
#include
#include "bgapi2_genicam/bgapi2_genicam.hpp"
using namespace BGAPI2;
#include
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左右,如下图所示:
工业相机的多帧采集模式具有很多优势,可以满足各种工业应用场景的需求。以下是一些主要的优势:
提高图像采集速率:多帧采集模式允许在短时间内连续捕获多个图像,从而提高图像采集的速率和效率。这在许多需要高速处理的应用场景中尤为重要,例如质量检测、工件定位等。
提高图像处理性能:通过将采集到的图像数据保存在缓存中,多帧采集模式可以确保相机在实时处理数据时不受CPU速度的限制。这样的设计可以保证系统在进行实时分析时具有较高的图像处理性能。
灵活满足工业应用需求:多帧采集模式具有多种采集方式,可以根据实际应用场景的需求选择合适的模式。例如,在追踪高速运动物体时,可以选择高速采集模式;而需要实时处理和分析图像时,可以选择连续采集模式。
确保高精度和稳定性:在诸如测量设备、质量检测等应用场景中,触发采集模式可以确保相机只在接收到外部触发信号时才捕获图像。这样可以确保图像采集的精确性和稳定性,提高整个系统的性能。
实现同步和异步采集:一些多帧采集模式允许相机在同步和异步模式下工作。这意味着在需要同时采集多个通道数据的场景中,可以保证多个通道之间的同步性,提高图像处理的效率和精度。
提高数据传输效率:多帧采集模式可以减少图像数据传输的开销,特别是对于高速、高分辨率的图像数据。例如,在高速采集模式下,通过降低图像分辨率或采集感兴趣区域(ROI)可以大幅降低数据传输的负担。
总之,工业相机的多帧采集模式有助于提高图像采集速率、处理性能、精度和稳定性等方面的性能,能更好地满足各种工业应用场景的需求。
工业相机的多帧采集模式具有很多优势,可以满足各种工业应用场景的需求。以下是一些主要的优势:
提高图像采集速率:多帧采集模式允许在短时间内连续捕获多个图像,从而提高图像采集的速率和效率。这在许多需要高速处理的应用场景中尤为重要,例如质量检测、工件定位等。
提高图像处理性能:通过将采集到的图像数据保存在缓存中,多帧采集模式可以确保相机在实时处理数据时不受CPU速度的限制。这样的设计可以保证系统在进行实时分析时具有较高的图像处理性能。
灵活满足工业应用需求:多帧采集模式具有多种采集方式,可以根据实际应用场景的需求选择合适的模式。例如,在追踪高速运动物体时,可以选择高速采集模式;而需要实时处理和分析图像时,可以选择连续采集模式。
确保高精度和稳定性:在诸如测量设备、质量检测等应用场景中,触发采集模式可以确保相机只在接收到外部触发信号时才捕获图像。这样可以确保图像采集的精确性和稳定性,提高整个系统的性能。
实现同步和异步采集:一些多帧采集模式允许相机在同步和异步模式下工作。这意味着在需要同时采集多个通道数据的场景中,可以保证多个通道之间的同步性,提高图像处理的效率和精度。
提高数据传输效率:多帧采集模式可以减少图像数据传输的开销,特别是对于高速、高分辨率的图像数据。例如,在高速采集模式下,通过降低图像分辨率或采集感兴趣区域(ROI)可以大幅降低数据传输的负担。
总之,工业相机的多帧采集模式有助于提高图像采集速率、处理性能、精度和稳定性等方面的性能,能更好地满足各种工业应用场景的需求。