Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
将工业相机图像数据转换为位图格式通常包括几个步骤:
这些步骤的具体技术细节会因所使用的具体相机和软件的不同而不同,但这个过程中使用的一些常用工具和技术可能包括:
本文这里介绍使用BGAPISDK的方法转换Baumer工业相机图像数据为Bitmap图像的几种方法(RGB)。
下面介绍在C++里Baumer工业相机如何使用BGAPISDK转换原始图像数据为Bitmap的几种方式(彩色RGB)
代码如下(示例):
#pragma once
#include "bgapi2_genicam.hpp"
using namespace BGAPI2;
如下转换格式仅限于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
兼容性: Bitmap图像具有普遍的兼容性,几乎可以在任何设备或平台上查看,包括电脑、智能手机和平板电脑。
简化处理: Bitmap图像可以很容易地使用标准的图像处理软件进行处理和编辑,使其成为工业应用中自动处理的理想选择。
高质量的图像: Bitmap图像提供高分辨率和色彩深度,从而产生高质量的图像,准确捕捉物体和场景的细节。
减少文件大小: Bitmap图像的尺寸通常比其他图像格式小,这使得它们更容易存储和传输。
易于整合: Bitmap图像很容易与其他软件和系统集成,使它们成为广泛的工业应用的理想选择。
质量控制: Bitmap图像可用于检测产品的缺陷、损坏或不完善之处。例如,在汽车行业,Bitmap图像可用于识别车身的划痕、凹痕和其他缺陷。
2.机器视觉: Bitmap图像可用于机器视觉系统,在制造过程中检测和检查产品的部件。它们可以用来测量尺寸,检查正确的装配,并检测缺陷或故障。
医学成像: Bitmap图像被广泛用于医学成像应用,如X射线、CT扫描和MRI扫描。它们可以用来帮助诊断病情和计划治疗。