Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(RGB)

简介: Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(RGB)

Baumer工业相机

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


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

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


Baumer工业相机图像数据转为Bitmap的技术背景

将工业相机图像数据转换为位图格式通常包括几个步骤:


从工业相机中获取图像数据,这可能需要使用专门的图像采集设备。

将图像数据从相机采集的原始格式转换为可由软件处理的标准化格式。

对图像数据进行预处理,以纠正原始图像中可能存在的失真或其他问题。

将预处理后的图像数据转换为位图格式,这是一种常用的文件格式,用于在计算机系统上存储图像。

这些步骤的具体技术细节会因所使用的具体相机和软件的不同而不同,但这个过程中使用的一些常用工具和技术可能包括:


SDK(软件开发工具包),提供访问相机硬件和处理原始图像数据的库和API

图像处理软件,如MATLAB或OpenCV,可用于纠正图像失真并对图像数据应用过滤器或其他调整。

图像转换库,如ImageMagick或GDAL,可用于将预处理的图像数据转换为位图格式。

本文这里介绍使用BGAPISDK的方法转换Baumer工业相机图像数据为Bitmap图像的几种方法(RGB)。


Baumer工业相机使用BGAPISDK将图像数据转换为Bitmap的几种方式

下面介绍在C++里Baumer工业相机如何使用BGAPISDK转换原始图像数据为Bitmap的几种方式(彩色RGB)


1.引用合适的类文件

代码如下(示例):

#pragma once
#include "bgapi2_genicam.hpp"
using namespace BGAPI2;

2.BGAPI SDK原始图像数据为Bitmap的几种方式(彩色RGB)

如下转换格式仅限于RGB格式的图像数据转换Bitmap。


第一种方式如下所示:

int width = 0, height = 0;
width = (int)pBufferFilled->GetWidth();height = (int)pBufferFilled->GetHeight();    //获取当前图像像素长宽
CString PixelFormat1 = (CString)pBufferFilled->GetPixelFormat();        //获取当前图像像素格式
imagebuffer = (BYTE*)((bo_int64)pBufferFilled->GetMemPtr()+pBufferFilled->GetImageOffset());//获取当前图像数据
Gdiplus::Rect rc = Gdiplus::Rect(0,0,width,height);
#pragma region 黑白相机代码:像素格式为mono时转Bitmap的代码,彩色相机此处代码不同
if(pDlg->m_pBitmap == NULL)
{
  pDlg->m_pBitmap = new Gdiplus::Bitmap(width,height,PixelFormat24bppRGB);
}
Gdiplus::BitmapData lockedbits;
#pragma endregion 
#pragma region 生成Bitmap图像
Gdiplus::Status ret = pDlg->m_pBitmap->LockBits(&rc,Gdiplus::ImageLockModeWrite,PixelFormat24bppRGB,&lockedbits);
BYTE* pixels = (BYTE*)lockedbits.Scan0;
BYTE* src = (BYTE*)imagebuffer;
for (int row = 0; row < height; ++row) 
{
  CopyMemory(pixels, src, lockedbits.Stride);
  pixels += width * 3;
  src += width * 3;
}
pDlg->m_pBitmap->UnlockBits(&lockedbits);
#pragma endregion 
#pragma region //保存图像功能
if(pDlg->m_bSaveImage &&!pDlg->m_strDirectory.IsEmpty())
{
  CTime time = CTime::GetCurrentTime(); 
  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 = pDlg->m_strDirectory+strtime+".jpg";
  pDlg->SaveImageColor(strpath, imagebuffer,width,height);
  pDlg->m_bSaveImage = false;
}
pragma endregion

第二种方式如下所示:

//将相机内部图像内存数据转为BGAPI2 Image
BGAPI2::Image* pImage = pDlg->m_imgProcessor->CreateImage((bo_uint)pBufferFilled->GetWidth(),(bo_uint)pBufferFilled->GetHeight(),pBufferFilled->GetPixelFormat(),pBufferFilled->GetMemPtr(),pBufferFilled->GetMemSize());
BGAPI2::Image* pTranImage  = pDlg->m_imgProcessor->CreateTransformedImage(pImage, "BGR8");
int width = (int)pTranImage->GetWidth();
int height = (int)pTranImage->GetHeight();
imagebuffer = (BYTE*)((bo_int64)pTranImage->GetBuffer()+pBufferFilled->GetImageOffset());
#pragma region 生成//制作一个相关大小的空白黑白Bitmap图像
if (pDlg->m_pBitmap == NULL)
{
  pDlg->m_pBitmap = new Gdiplus::Bitmap(width, height, PixelFormat24bppRGB);
}
Gdiplus::BitmapData lockedbits;
#pragma endregion 
#pragma region //将图像数据写入前面生成的空白Bitmap图像
Gdiplus::Rect rc = Gdiplus::Rect(0,0,width,height);
Gdiplus::Status ret = pDlg->m_pBitmap->LockBits(&rc, Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &lockedbits);
BYTE* pixels = (BYTE*)lockedbits.Scan0;
BYTE* src = (BYTE*)imagebuffer;
for (int row = 0; row < height; ++row)
{
  CopyMemory(pixels, src, lockedbits.Stride);
  pixels += width * 3;
  src += width * 3;
}
pDlg->m_pBitmap->UnlockBits(&lockedbits);
#pragma endregion

Baumer工业相机图像转换为Bitmap图像的优势

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


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


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


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


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


Baumer工业相机图像转换为Bitmap图像的行业应用

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


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


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


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

监视: Bitmap图像可用于监控系统,以检测和识别入侵者或嫌疑人。它们可以用来捕捉车牌、人脸和其他识别特征的图像。

目录
相关文章
|
6月前
|
存储 数据采集 数据可视化
【C++】医院PACS医学图像存储和传输系统源码
图像后处理与重建 •MPR\CPR(三维多平面重建) •VRT(三维容积重建) •SSD(三维表面重建) •VE(虚拟内窥镜) •MIP(最大密度投影)、MinIP(最小密度投影) •CalSCore(心脏图像冠脉钙化积分)
95 3
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
92 0
|
3月前
|
传感器 定位技术 C++
基于C++的GDAL用空白栅格填充长时间序列遥感影像中的缺失图像
然后,定义需要处理的遥感影像路径列表,和识别数据缺失的逻辑。这里我们简化处理,假设已经知道哪一幅图像是缺失的,因此直接跳过识别步骤。
61 1
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
75 0
|
5月前
|
算法 Java API
在VC++中使用CxImage库读写图像实现像素操作
在VC++中使用CxImage库读写图像实现像素操作
37 0
|
6月前
|
存储 算法 数据可视化
|
6月前
|
C++ 计算机视觉 Python
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
188 0
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
95 0
|
19天前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
51 1
|
29天前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
50 7