Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置自动亮度调整BrightnessAuto(自动曝光自动增益)(C++)

简介: Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置自动亮度调整BrightnessAuto(自动曝光自动增益)(C++)

自动亮度调整项目场景

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


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


Baumer工业相机的提供的BGAPI SDK可以在相机初始化时获取相机设备的信息,然后通过SDK自带的BrightnessAuto功能实现自动亮度调整功能。使得在光照条件不断变化的应用中也能轻松实现相机集成


自动亮度调整技术背景

从Baumer工业相机获取工业相机的固件参数需要了解相机的SDK(软件开发工具包)及其相关文档。SDK提供应用编程接口(API)和示例代码,使开发人员能够与相机互动并检索其固件参数。


Baumer工业相机的自动曝光功能通常依赖于硬件和软件功能的结合。


在硬件方面,工业相机通常使用光电二极管等传感器来检测场景中的光线水平。它们还可能利用具有可变光圈的镜头,从而可以更好地控制进入相机的光量。


在软件方面,自动曝光算法通常使用反馈回路来调整相机设置,如快门速度、光圈和ISO灵敏度,以应对光线的变化。这些算法还可能考虑到一些因素,如所需的图像对比度,被拍摄场景的动态范围,以及相机的曝光测光模式(如点测,平均测,或矩阵测)。


总的来说,Baumer工业相机自动曝光的目标是确保以最佳的亮度和对比度拍摄图像,同时最大限度地减少由曝光过度或曝光不足引起的噪音和其他图像伪影。


自动亮度调整功能分析

Baumer工业相机的BGAPI SDK中已经集成自动亮度调整功能,本文将介绍在C++平台中如何使用自动亮度调整功能。


开启Baumer工业相机自动亮度调整功能核心代码如下所示:

void CGigeDemoDlg::OnBnClickedBtnforceip()
{
  if(m_pDevice != NULL)
  {
  try 
  {   
    //设置当前自动亮度调整功能的状态为未运行状态
    BGAPI2::BrightnessAuto::BrightnessAutoState state = BGAPI2::BrightnessAuto::DIDNOT_RUN;
    //获取当前自动亮度调整功能的状态
    state = m_pDevice->brightness_auto.GetState();
    //设置相机当前最大曝光可为500000
    m_pDevice->brightness_auto.SetExposureMaxValue(500000);
    //启动相机自动亮度调整功能一次ONCE,持续调整为:CONTINUS
    m_pDevice->brightness_auto.SetMode(BGAPI2::BrightnessAuto::ONCE); 
    //获取当前自动亮度调整功能的状态
    state = m_pDevice->brightness_auto.GetState();
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
    MessageBox(_T("Camera BrightnessAuto Function Error"));
  }
  } 
}


注意:Baumer工业相机自动亮度调整功能开启后将无法手动调整曝光和增益,需要关闭该功能后方能正常调整曝光和增益。


关闭Baumer工业相机自动亮度调整功能在调整曝光和增益核心代码如下所示:

void CGigeDemoDlg::OnBnClickedBtnexposure()
{
  // TODO:设置相机曝光  
  CString strShutter;
  m_edtShutter.GetWindowText(strShutter);
  int nShutter = _wtol(strShutter);
  if(m_pDevice != NULL)
  {
  //关闭相机自动亮度调整功能
  m_pDevice->brightness_auto.SetOff();
  m_pDevice->GetRemoteNode("ExposureTime")->SetDouble(nShutter);
  }
}
void CGigeDemoDlg::OnBnClickedBtngain()
{
  // TODO: 设置相机增益
  CString strGain;
  double  fGain;
  m_edtGain.GetWindowText(strGain);
  fGain= _wtof(strGain);
  if(m_pDevice != NULL)
  {
  //关闭相机自动亮度调整功能
  m_pDevice->brightness_auto.SetOff();
  m_pDevice->GetRemoteNode("Gain")->SetDouble(fGain);
  }
}

测试效果图:


(未使用BrightnessAuto功能)


8.png


(开启BrightnessAuto功能)


7.png


从上面可以看出开启BrightnessAuto功能后, Baumer工业相机的曝光和增益将会自动调整到合适的范围值。


自动曝光和自动增益(自动亮度调整)功能的优点

工业相机的自动曝光功能有几个优点,


1. 稳定的图像质量。有了自动曝光,相机会调整其设置,以确保拍摄的每张图像都有最佳的亮度和对比度。


2. 提高生产力。通过使用自动曝光,操作员不需要花时间手动调整相机设置,这可以提高工业环境中的生产力。


3. 减少了操作者的错误。当手动调整摄像机设置时,发生错误的可能性较大。自动曝光有助于通过自动化过程来消除这种风险。


4. 更好的图像分析。用自动曝光拍摄的图像往往具有更一致的照明和对比度,使分析和测量更容易、更准确。


总的来说,工业相机的自动曝光功能可以帮助简化操作,减少错误,并在各种工业环境中提高图像质量。。


自动曝光和自动增益(自动亮度调整)功能注意要点

在使用工业相机的自动曝光功能时,有几件事需要注意


1. 照明条件。确保环境中的照明条件是稳定和一致的。照明的波动会影响曝光设置,导致结果不一致。


2. 对比度。高对比度的场景可能会导致曝光过度或曝光不足的区域,所以相应地调整曝光设置是很重要的。


3. 白平衡。确保白平衡设置正确,特别是如果你使用自动白平衡。不正确的白平衡会导致颜色的转变和不准确的曝光。


4. 快门速度:快门速度决定了相机快门打开的时间,直接影响到曝光。要注意使用的快门速度,以避免运动模糊或曝光不足的图像。


5. ISO:避免使用高ISO设置,因为它可能引入噪音并降低图像质量。尽量使用最低的ISO设置。 通过注意这些因素,你可以确保你的工业相机的自动曝光功能产生准确和一致的结果。


自动曝光和自动增益(自动亮度调整)功能工业相机的行业应用

具有自动曝光功能的工业相机被广泛用于各个行业的多种应用。


1. 质量控制和检查。这些相机可用于制造线,以确保产品符合特定的质量标准。相机可以检测到产品的缺陷和不正常情况,并触发警报或通知。


2. 机器视觉。具有自动曝光功能的工业相机是机器视觉应用的理想选择,在这种应用中,需要对物体进行实时跟踪、测量或检查。例如,它们可用于检测机器零件的缺陷,监测生产过程,或跟踪物体的移动。


3. 机器人技术。这些相机可以与机器人集成,为各种任务提供视觉反馈并提高准确性和精确性。它们可以用来引导机器人,验证零件的位置,并检测制造过程中的错误。


4. 监视。工业相机也可用于监控目的,如跟踪人员或车辆的移动,检测安全设施中的入侵者,并确定工作区的潜在安全危险。


5.人工智能。工业相机可以与智慧驾驶、无人飞行等AI领域的行业进行多方面的集成,是其中不可或缺的重要组成部分。

目录
相关文章
|
6月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
496 0
|
6月前
|
传感器 算法 C++
C++ PCL 设置法向量的方向
C++ PCL 设置法向量的方向
116 0
|
6月前
|
编译器 C++
VS Code设置C++编译器路径
VS Code设置C++编译器路径
84 0
|
6月前
|
JSON Java API
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
|
6月前
|
固态存储 Java 网络安全
【Azure Developer】使用Java SDK代码创建Azure VM (包含设置NSG,及添加数据磁盘SSD)
【Azure Developer】使用Java SDK代码创建Azure VM (包含设置NSG,及添加数据磁盘SSD)
|
6月前
|
缓存 Java API
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
|
6月前
|
API 开发工具 vr&ar
PicoVR Unity SDK⭐️一、SDK下载、项目设置与程序初始配置
PicoVR Unity SDK⭐️一、SDK下载、项目设置与程序初始配置
|
6月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
3天前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
69 19

热门文章

最新文章