Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现Bitmap的图像转换功能(C++)

简介: Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现Bitmap的图像转换功能(C++)

Baumer工业相机


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


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


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


Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。


Baumer工业相机NEOAPI SDK实现Bitmap的图像转换功能技术背景


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


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


工业相机获取的数据通常不是直接的图像格式,而是一块缓存区(buffer)。不同的图像处理软件需要的图像数据格式不一样,例如OpenCV存储图像用cv::Mat,Halcon存储图像用Halcon::HObject或者Halcon::HImage。因此,将工业相机图像转换为位图(Bitmap)格式需要经过一系列的步骤:


首先,从工业相机中获取图像数据,这可能需要使用专门的图像采集设备。然后,将图像数据从相机采集的原始格式转换为可由软件处理的标准化格式。最后,通过特定的函数或库,如BGAPI SDK或C#编程语言,实现Raw图像到Bitmap图像的转换并进行保存。


这种转换技术广泛应用于机器视觉领域,以适应不同的应用场景和需求。


Baumer工业相机通过NEOAPI SDK实现Bitmap的图像转换功能


下面介绍在C++里Baumer工业相机如何通过NEOAPI SDK实现Bitmap的图像转换


1.引用合适的类文件


代码如下(示例):

#include <stdio.h>
#include <iostream>
#include "bgapi2_genicam/bgapi2_genicam.hpp"
#include <iostream>
#include <iostream>
#include "neoapi.hpp"


2.通过NEOAPI SDK实现Bitmap的图像转换功能


Baumer工业相机实现Bitmap的图像转换模式核心代码如下所示:

NeoAPI::Cam camera = NeoAPI::Cam();
camera.Connect();
camera.f().ExposureTime.Set(10000);
int width = static_cast<int>(camera.f().Width);
int height = static_cast<int>(camera.f().Height);
if (camera.IsConnected())
{   
  //  获取当前相机的图像的像素格式   
  NeoAPI::NeoString CurPixelFormat = camera.f().PixelFormat.GetString();
  CString CurPixelFormatstr = (CString)CurPixelFormat;    
  NeoAPI::FeatureList FeatureListS = camera.f().PixelFormat.GetEnumValueList();
  // 检查该相机是否存在短曝光模式
  if (camera.f().ShortExposureTimeEnable.IsAvailable())
  {
    // 开启短曝光功能
    camera.f().ShortExposureTimeEnable.Set(TRUE);
    // 设置曝光为1微秒
    camera.f().ExposureTime.Set(1.0);
    // 设置相机为自由采集模式
    camera.f().TriggerMode.Set(NeoAPI::TriggerMode::Off);
    // 启动相机开始采集  
    camera.f().AcquisitionStart.Execute();
    // 采集一张图像 
    NeoAPI::Image image = camera.GetImage();
      //  保存采集图像
    unsigned char* imagebuffer = NULL;
    USES_CONVERSION;
    int width = 0, height = 0;
    width = (int)image.GetWidth();height = (int)image.GetHeight();  //获取当前图像像素长宽
    CString PixelFormat1 = (CString)image.GetPixelFormat();       //获取当前图像像素格式
    imagebuffer = (BYTE*)(image.GetImageData());              //获取当前图像数据
    CString ImageID1str;
    ImageID1str.Format(_T("%d"), (int)image.GetImageID());        //获取当前图像FrameID
    Gdiplus::Rect rc = Gdiplus::Rect(0, 0, width, height);
    #pragma region 黑白相机代码:像素格式为mono时转Bitmap的代码,彩色相机此处代码不同
    if (m_pBitmap == NULL)
    {
      m_pBitmap = new Gdiplus::Bitmap(width, height, PixelFormat8bppIndexed);
    }
    Gdiplus::BitmapData lockedbits;
    Gdiplus::ColorPalette * pal = (Gdiplus::ColorPalette*)new   BYTE[sizeof(Gdiplus::ColorPalette) + 255 * sizeof(Gdiplus::ARGB)];
    pal->Count = 256;
    for (UINT i = 0;i < 256;i++)
    {
      UINT color = i * 65536 + i * 256 + i;
      color = color | 0xFF000000;
      pal->Entries[i] = color;
    }
    m_pBitmap->SetPalette(pal);
    Gdiplus::Status ret = m_pBitmap->LockBits(&rc, Gdiplus::ImageLockModeWrite, PixelFormat8bppIndexed, &lockedbits);
    BYTE* pixels = (BYTE*)lockedbits.Scan0;
    BYTE* src = (BYTE*)imagebuffer;
    for (int row = 0; row < height; ++row)
    {
      CopyMemory(pixels, src, lockedbits.Stride);
      pixels += width;
      src += width;
    }
    m_pBitmap->UnlockBits(&lockedbits);
    #pragma endregion 
      CString strtime;
    strtime.Format(_T("\\%4d%2d%2d%2d%2d%2d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
    CString  strpath = m_strDirectory + strtime + "-";
    CString  strpath2;
    strpath2.Format(_T("%s%d"), strpath, image.GetImageID());
    // 转换图像名称为NeoAPI::NeoString格式,然后保存对应路径
    USES_CONVERSION;
    std::string strpath2str(W2A(strpath2));
    const char* strpath2str2 = strpath2str.c_str();
    NeoAPI::NeoString strpath3 = strpath2str2;
    image.Save(strpath3);
    image.Save("neoapi-sdk-shortexposuretime-image");     
  }
}


Baumer工业相机实现Bitmap的图像转换功能的优势


  1. 兼容性: Bitmap图像具有普遍的兼容性,几乎可以在任何设备或平台上查看,包括电脑、智能手机和平板电脑。


  1. 简化处理: Bitmap图像可以很容易地使用标准的图像处理软件进行处理和编辑,使其成为工业应用中自动处理的理想选择。


  1. 高质量的图像: Bitmap图像提供高分辨率和色彩深度,从而产生高质量的图像,准确捕捉物体和场景的细节。


  1. 减少文件大小: Bitmap图像的尺寸通常比其他图像格式小,这使得它们更容易存储和传输。


  1. 易于整合: Bitmap图像很容易与其他软件和系统集成,使它们成为广泛的工业应用的理想选择。


Baumer工业相机实现Bitmap的图像转换功能的行业应用


  1. 质量控制: Bitmap图像可用于检测产品的缺陷、损坏或不完善之处。例如,在汽车行业,Bitmap图像可用于识别车身的划痕、凹痕和其他缺陷。


  1. 机器视觉: Bitmap图像可用于机器视觉系统,在制造过程中检测和检查产品的部件。它们可以用来测量尺寸,检查正确的装配,并检测缺陷或故障。


  1. 医学成像: Bitmap图像被广泛用于医学成像应用,如X射线、CT扫描和MRI扫描。它们可以用来帮助诊断病情和计划治疗。


  1. 机器人技术: Bitmap图像可用于机器人应用,在生产过程中向机器人提供视觉反馈。它们使机器人能够识别和绕过障碍物,并执行任务,如精确地挑选和放置物体。


  1. 监视: Bitmap图像可用于监控系统,以检测和识别入侵者或嫌疑人。它们可以用来捕捉车牌、人脸和其他识别特征的图像。
目录
相关文章
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
155 1
|
3月前
|
编解码 缓存 开发工具
Pico Neo 3教程☀️ 三、SDK 的进阶功能
Pico Neo 3教程☀️ 三、SDK 的进阶功能
|
3月前
|
编解码 Linux 开发工具
大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
大牛直播SDK是一款跨平台RTMP直播推送模块,支持Windows、Linux(x64_64与aarch64架构)、Android及iOS平台。该SDK功能全面,包括摄像头、屏幕、麦克风等数据采集与推送,并支持编码前后数据对接。其架构设计优秀,确保低延迟与高效率,结合SmartPlayer播放器实现毫秒级延迟体验。具备全自研框架,易于扩展且支持多种数据源接入,如外部YUV/RGB/H.264等格式。此外,各平台支持特性丰富,如Windows平台支持多摄像头合成,Android与iOS平台支持前后摄像头实时切换等。大牛直播SDK还提供了多个示例项目以帮助开发者快速上手。
|
3月前
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
70 0
|
6月前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
14天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4
|
14天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
16 4
|
14天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
15 1
|
24天前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)