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

news/2024/11/17 1:48:53/

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

  • Baumer工业相机
  • Baumer工业相机图像数据转为Bitmap的技术背景
  • Baumer工业相机使用BGAPISDK将图像数据转换为Bitmap的几种方式
    • 1.引用合适的类文件
    • 2.BGAPI SDK原始图像数据为Bitmap的几种方式(Mono)
  • Baumer工业相机图像转换为Bitmap图像的优势
  • Baumer工业相机图像转换为Bitmap图像的行业应用

Baumer工业相机

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

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

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

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

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

  1. 从工业相机中获取图像数据,这可能需要使用专门的图像采集设备。
  2. 将图像数据从相机采集的原始格式转换为可由软件处理的标准化格式。
  3. 对图像数据进行预处理,以纠正原始图像中可能存在的失真或其他问题。
  4. 将预处理后的图像数据转换为位图格式,这是一种常用的文件格式,用于在计算机系统上存储图像。

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

  • SDK(软件开发工具包),提供访问相机硬件和处理原始图像数据的库和API
  • 图像处理软件,如MATLAB或OpenCV,可用于纠正图像失真并对图像数据应用过滤器或其他调整。
  • 图像转换库,如ImageMagick或GDAL,可用于将预处理的图像数据转换为位图格式。

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

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

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

1.引用合适的类文件

代码如下(示例):

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

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

如下转换格式仅限于Mono格式的图像数据转换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,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;
}
pDlg->m_pBitmap->SetPalette(pal);
#pragma endregion #pragma region 生成Bitmap图像
Gdiplus::Status ret = pDlg->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;
}
pDlg->m_pBitmap->UnlockBits(&lockedbits);
#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, "Mono8");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, 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;
}
pDlg->m_pBitmap->SetPalette(pal);
#pragma endregion #pragma region //将图像数据写入前面生成的空白Bitmap图像
Gdiplus::Rect rc = Gdiplus::Rect(0,0,width,height);
Gdiplus::Status ret = pDlg->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;
}
pDlg->m_pBitmap->UnlockBits(&lockedbits);
#pragma endregion 

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

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

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

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

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

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

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

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

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

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

    1. 机器人技术: Bitmap图像可用于机器人应用,在生产过程中向机器人提供视觉反馈。它们使机器人能够识别和绕过障碍物,并执行任务,如精确地挑选和放置物体。
    1. 监视: Bitmap图像可用于监控系统,以检测和识别入侵者或嫌疑人。它们可以用来捕捉车牌、人脸和其他识别特征的图像。

http://www.ppmy.cn/news/68910.html

相关文章

docker安装mysql并修改远程登陆权限

一、docker 安装 启动容器 sudo docker start 831316f3ca61查看容器 sudo docker ps -a进入容器 sudo doker exec -it cf49e8f51a31 /bin/bash删除容器 sudo docker rm 831316f3ca61根据Dockerfile 创建镜像 sudo docker build -t solidifi .运行某个容器 sudo docker run -it…

边缘计算的挑战与未来:探索物联网、自动驾驶和智能城市的边缘计算应用

随着移动互联网、物联网和5G技术的发展&#xff0c;边缘计算正在成为一种重要的计算范式&#xff0c;越来越多的企业和组织开始将其应用于实际业务中。边缘计算旨在将计算和数据存储推向离用户更近的边缘设备&#xff0c;以提高响应速度、降低成本和提高用户体验。在本次研讨会…

【Swift】Swift和Objective-c混编

1.介绍 Swift和Objective-C都是苹果公司的编程语言&#xff0c;它们可以在同一个项目中同时使用。这种混编方式被称为“混合编程”&#xff08;Mixed Programming&#xff09;。 在混合编程时&#xff0c;我们需要用到一个桥接文件&#xff08;Bridging Header&#xff09;&a…

Blender渲染分辨率如何优化设置?这些渲染技巧你要知道!

尽管 Blender不断改进其功能&#xff0c;随着硬件的不断进步而变得越来越复杂&#xff0c;该软件最好的是允许很多人免费试用它。但即使所有人都可以访问&#xff0c;这并不意味着Blender可以克服低端GPU的局限性。 并非所有PC都是平等的&#xff0c;也不是每个3D设计师都可以使…

Maven下载安装及IDEA配置Maven的超详细教程

Maven下载安装及IDEA配置Maven的超详细教程 1、IntelliJ IDEA 下载、安装及配置过程2、maven下载、安装、配置过程2.1 mavan下载2.2 安装2.3 配置 3、在IDEA中配置Maven3.1 进入设置界面3.2 maven配置 4、IDEAmaven创建工程示例 Maven是一个能使我们的java程序开发节省时间和精…

【软考|软件设计师】某计算机系统的CPU主频为2.8GHz

目录 题&#xff1a; CPI MIPS 题&#xff1a; 某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令&#xff0c;各类指令的CPI &#xff08;执行每条指令所需要的时钟周期&#xff09;及指令比例如下表所示。执行该应用程序时 的平均CPI为______&#xff1b; 运算速度…

Spring 拦截器

目录 今日良言&#xff1a;心若有所向往&#xff0c;何惧道阻且长 一、Spring 拦截器 1.拦截器简介 2.实现自定义拦截器 今日良言&#xff1a;心若有所向往&#xff0c;何惧道阻且长 一、Spring 拦截器 1.拦截器简介 Spring Boot 拦截器是面向切面编程-----AOP 的具体实现…

第一个Go语言程序

第一个Go语言程序 目录 第一个Go语言程序引言Go的开发环境安装GoPATH编辑器 第一个Go程序总结 引言 本系列博客将手把手带着大家从零基础入门go语言&#xff0c;不定时更新吧&#xff0c;自己学到哪就更新到哪&#xff0c;先讲讲为什么要学习go语言&#xff1a;列出以下几点go…