Baumer工业相机堡盟相机如何使用BGAPI SDK实现相机资源的正确释放(C++)

简介: Baumer工业相机堡盟相机如何使用BGAPI SDK实现相机资源的正确释放(C++)

Baumer工业相机

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


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

Baumer工业相机的BGAPI SDK一般在使用相机后在最好需要将相机资源释放,释放的步骤比较重要,本文介绍如何正确地使用BGAPI SDK释放相机资源


Baumer工业相机SDK技术背景

Baumer工业相机的BGAPI SDK可以提供相机的图像原始数据,在集成相机和视觉软件使用后,关闭视觉软件时需要同时使用SDK去释放SDK占用的相机资源。


工业相机的SDK(Software Development Kit)是为了方便开发人员对工业相机进行控制和图像采集而提供的一套软件工具。而Halcon是一款强大的机器视觉软件,能够进行图像处理、分析、识别等多种任务。


这里主要描述如何在C++的平台下实现对应的资源释放功能的核心代码


代码分析

本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,使用SDK进行相机资源释放的功能。


释放所有相机资源

相机资源释放,在软件关闭,程序退出的时候,需要将创建的资源逐一关闭并释放,资源关闭

释放的顺序跟创建的顺序正好相反;


C++环境下释放所有相机资源代码如下所示:

void CGigeDemoDlg::OnBnClickedCancel()
{
  // TODO: 在此添加控件通知处理程序代码
  USES_CONVERSION;
  //执行相机关闭指令
  try
  {
  if (m_pDevice != NULL)
  {
    if (m_pDevice->GetRemoteNodeList()->GetNodePresent("AcquisitionAbort"))
    {
    m_pDevice->GetRemoteNode("AcquisitionAbort")->Execute();
    }
    m_pDevice->GetRemoteNode("AcquisitionStop")->Execute();
  }
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
  CString str1;
  str1.Format(_T("ExceptionType:%s! ErrorDescription:%s in function:%s"),ex.GetType(),ex.GetErrorDescription(),ex.GetFunctionName());
  MessageBox(str1);
  }
  //停止相机的采集流
  //STOP DataStream acquisition
  try
  {
  if (m_pDataStream != NULL)
  {
    m_pDataStream->StopAcquisition();
    m_pBufferList->DiscardAllBuffers();
  }
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
  CString str2;
  str2.Format(_T("ExceptionType:%s! ErrorDescription:%s in function:%s"),ex.GetType(),ex.GetErrorDescription(),ex.GetFunctionName());
  MessageBox(str2);
  }
  //释放相机的采集流
  //Release buffers
  try
  {
  if (m_pDataStream != NULL)
  {
    while (m_pBufferList->size() > 0)
    {
    m_pBuffer = m_pBufferList->begin()->second;
    m_pBufferList->RevokeBuffer(m_pBuffer);
    delete m_pBuffer;
    }
    //关闭相机的数据流
    m_pDataStream->Close();
    //关闭相机的设备
    m_pDevice->Close();
    //关闭相机连接的网口
    m_pInterface->Close();
    //关闭相机连接的实例类
    m_pSystem->Close();
    //释放相机连接类的资源
    BGAPI2::SystemList::ReleaseInstance();
    //Enable the button_inialize
    //GetDlgItem(ID_BTNINITIALIZE)->EnableWindow(TRUE);
  }
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
  CString str3;
  str3.Format(_T("ExceptionType:%s! ErrorDescription:%s in function:%s"),ex.GetType(),ex.GetErrorDescription(),ex.GetFunctionName());
  MessageBox(str3);
  }
  CDialogEx::OnCancel();
}

释放相机资源注意点

C++环境下释放相机资源代码需要特别注意相机数据流的停止指令,这块尤其重要;

有时停止指令发送后,未停止相机数据流,后面直接执行相机的类释放会导致报错发生。

//STOP DataStream acquisition
  try
  {
  if (m_pDataStream != NULL)
  {
    **m_pDataStream->StopAcquisition();**
    m_pBufferList->DiscardAllBuffers();
  }
  }
  catch (BGAPI2::Exceptions::IException& ex)
  {
  CString str2;
  str2.Format(_T("ExceptionType:%s! ErrorDescription:%s in function:%s"),ex.GetType(),ex.GetErrorDescription(),ex.GetFunctionName());
  MessageBox(str2);
}

工业相机SDK来释放工业相机的资源的优点

增加灵活性: 通过使用SDK,开发人员可以定制和调整相机功能,以更好地适应他们的具体应用要求。


改进集成: 该SDK允许多个相机和相机组件与其他硬件和软件系统无缝集成。


更大程度的控制: 使用工业相机SDK可以更深入、更直接地访问相机的功能和数据,从而更好地控制捕获的图像和视频。


增强性能: 使用SDK可以提高相机性能,加快数据处理速度,从而获得更高质量的图像和视频。


降低成本: SDK允许在选择和定制相机系统时有更大的灵活性,从长远来看有可能导致成本的节约。


工业相机SDK来释放工业相机的资源的重要性

在软件中正确释放工业相机资源非常重要,因为它可以确保相机及其相关硬件不会处于不一致或不稳定的状态,这可能导致内存泄漏、性能下降和系统崩溃等问题。


遵循SDK(软件开发工具包)中的步骤,可以确保摄像机使用的所有组件被正确关闭,任何内存或其他系统资源被正确释放。


这可以帮助确保摄像机及其相关组件正常工作,并确保软件应用程序长期稳定和可靠。

目录
相关文章
|
6月前
|
存储 API 开发工具
【Azure 环境】在Azure虚拟机(经典) 的资源中,使用SDK导出VM列表的办法
【Azure 环境】在Azure虚拟机(经典) 的资源中,使用SDK导出VM列表的办法
|
6月前
|
开发工具 数据安全/隐私保护 Python
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
|
9月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
112 0
|
9月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
97 0
|
9月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
74 0
|
9月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
111 0
|
9月前
|
存储 机器人 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现Bitmap的图像转换功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现Bitmap的图像转换功能(C++)
93 0
|
16天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
118 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
3月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
143 1
|
4月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
91 7

热门文章

最新文章