Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)
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的技术背景
将工业相机图像数据转换为位图格式通常包括几个步骤:
- 从工业相机中获取图像数据,这可能需要使用专门的图像采集设备。
- 将图像数据从相机采集的原始格式转换为可由软件处理的标准化格式。
- 对图像数据进行预处理,以纠正原始图像中可能存在的失真或其他问题。
- 将预处理后的图像数据转换为位图格式,这是一种常用的文件格式,用于在计算机系统上存储图像。
这些步骤的具体技术细节会因所使用的具体相机和软件的不同而不同,但这个过程中使用的一些常用工具和技术可能包括:
- 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图像的优势
-
兼容性: Bitmap图像具有普遍的兼容性,几乎可以在任何设备或平台上查看,包括电脑、智能手机和平板电脑。
-
简化处理: Bitmap图像可以很容易地使用标准的图像处理软件进行处理和编辑,使其成为工业应用中自动处理的理想选择。
-
高质量的图像: Bitmap图像提供高分辨率和色彩深度,从而产生高质量的图像,准确捕捉物体和场景的细节。
-
减少文件大小: Bitmap图像的尺寸通常比其他图像格式小,这使得它们更容易存储和传输。
-
易于整合: Bitmap图像很容易与其他软件和系统集成,使它们成为广泛的工业应用的理想选择。
Baumer工业相机图像转换为Bitmap图像的行业应用
-
质量控制: Bitmap图像可用于检测产品的缺陷、损坏或不完善之处。例如,在汽车行业,Bitmap图像可用于识别车身的划痕、凹痕和其他缺陷。
-
2.机器视觉: Bitmap图像可用于机器视觉系统,在制造过程中检测和检查产品的部件。它们可以用来测量尺寸,检查正确的装配,并检测缺陷或故障。
-
医学成像: Bitmap图像被广泛用于医学成像应用,如X射线、CT扫描和MRI扫描。它们可以用来帮助诊断病情和计划治疗。
-
- 机器人技术: Bitmap图像可用于机器人应用,在生产过程中向机器人提供视觉反馈。它们使机器人能够识别和绕过障碍物,并执行任务,如精确地挑选和放置物体。
-
- 监视: Bitmap图像可用于监控系统,以检测和识别入侵者或嫌疑人。它们可以用来捕捉车牌、人脸和其他识别特征的图像。
相关文章:
Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)
Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C) Baumer工业相机Baumer工业相机图像数据转为Bitmap的技术背景Baumer工业相机使用BGAPISDK将图像数据转换为Bitmap的几种方式1.引用合适的类文件2.BGAPI SDK原始图像数据为Bi…...
C++笔试笔记2
C笔试笔记2 百富计算机的笔试 const限定符:首先作用于左边,如果左边没东西,就作用于右边。 const int: 左边没有内容,所以const作用于右边,就是“整型常量”。等同于int const; int * const&am…...
手写Spring框架
手写Spring框架 各位道友,我发现现在贼卷底层代码,看完源码发下几天后,额!!!我当时看了啥! 还是自己写个迷你的spring框架,这样印象更加深刻,上干货,代码仓…...
微服务学习笔记--(Docker)
目录 初识DockerDcoker的基本操作Dockerfile自定义镜像Docker-ComposeDocker镜像服务 初始Docter 什么是DockerDocker和虚拟机的区别Docker架构安装Docker 初识Docker-什么是docker 项目部署的问题 大型项目组件较多,运行环境也较为复杂,部署时会碰…...
ChatGPT 国内版免费
ChatGPT 是最新的聊天机器人技术,它可以让你更快地完成各种任务。如果你想要一个在国内的免费版本,你来对地方了!在这篇文章中,我们将会分享与你 ChatGPT的最新信息,以及在国内使用 ChatGPT 的方法。如果你想要了解更多…...
推荐5个免费好用的UI模板网站!
1、即时设计 即时设计资源广场是一个聚集了大量优秀设计作品和大厂设计系统超过3000个UI组件库的设计师灵感库。该广场每月更新上百个精品模板,且还将这些模板分门别类按不同类型素材进行分类,其丰富的设计资源包括移动设计、网页设计、插画、线框图、矢…...
linux 安装 maven 3.8 版本
文章目录 1:maven 仓库官网 2、下载安装包 3、使用:Xftp 上传到你想放的目录 4、解压文件 编辑 5、配置环境变量 编辑 6、刷新 /etc/profile 文件 7、查看maven 版本 1:maven 仓库官网 Maven – Download Apache Mavenhttps://mave…...
Redis的三种持久化策略及选取建议
文章目录 Redis的三种持久化策略及选取建议前言RDB(快照)概述优缺点 AOF(追加文件)概述优缺点AOF刷盘策略AOF重写 选取正确的持久化策略AOF和RDB的选择AOF与RDB的混合模式AOF重写和RDB持久化的冲突AOF校验机制三种模式的选择建议 …...
力扣LCP 33. 蓄水
LCP 33. 蓄水 给定 N 个无限容量且初始均空的水缸,每个水缸配有一个水桶用来打水,第 i 个水缸配备的水桶容量记作 bucket[i]。有以下两种操作: 升级水桶:选择任意一个水桶,使其容量增加为 bucket[i]1 蓄水࿱…...
内网渗透(八十一)之搭建Exchange服务器
搭建Exchange服务器 环境安装准备 1、Windows Server 2012 R2以管理员身份运行Windows Powershell,安装必需的 Windows组件: Install-WindowsFeature NET-Framework-45-Features, Server-Media-Foundation, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInt…...
web缓存Squid代理服务
缓存网页对象,减少重复请求 squid代理服务器,主要提供缓存加速,应用层过滤控制的功能 代理工作机制 1.代替客户机向网站请求数据,从而可以隐藏用户的真实ip地址 2.将获得的网页数据(静态web元素)保存到缓…...
vue实现聊天框自动滚动
需求 1、聊天数据实时更新渲染到页面 2、页面高度随聊天数据增加而增加 3、竖向滚动 4、当用户输入聊天内容或者接口返回聊天内容渲染在页面后,自动滚动到底部 5、提供点击事件操控滚动条上下翻动 环境依赖 vue:vue…...
项目中遇到的一些问题总结(六)
Minio Minio是一个开源的分布式对象存储系统,它使用纠删码技术来保护数据。纠删码技术是一种恢复丢失和损坏数据的数学算法,它将数据分块冗余的分散存储在各个节点的磁盘上,从而提供了一定程度的数据可靠性和冗余性。 在Minio中,…...
Linux线程5——生产消费模型
生产消费模型 1个交易场所:超市 2种角色:生产者/消费者 3种关系:生产者和生产者(竞争关系也叫互斥关系),消费者和消费者(竞争关系同样是互斥关系),生产者和消费者(互斥,同步关系:生产完再消费或消费完再生产)。 以上是生产消费模型遵守的“321”原则。 生产者和消…...
Vue + Springboot 文件上传项目笔记(一)
Vue Springboot 文件上传项目笔记(一) 前端 使用脚手架创建项目 vue create vue_fileuploaddemo等待命令执行完毕添加 element-ui 组件 E:\java\idea_java_maven\vue_fileuploaddemo>yarn add element-ui yarn add v1.22.19 [1/4] Resolving pac…...
【华为OD机试真题2023B卷 JAVA】座位调整
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 座位调整 知识点迭代 时间限制:1s 空间限制:256MB 限定语言:C(clang11), C++(clang++11), Java(javac 1.8), Python3(3.9), JavaScript Node(12.18.2), Go(1.14.4) 题目描述: 疫情期间课堂的座位进行了特殊的调整,不能出…...
Python 学习 2022.08.28 周日
文章目录 一、 概述1.1) 之前写的文章:1.2) 基础点1.3) 配置1.4) Python2 和 Python3 的区别1.5) 相关问题跟踪解决1.6) 其他 一、 概述 1.1) 之前写的文章: 【Python大系】Python快速教程《Python 数据库 GUI CGI编…...
WEB自动化测试,一定得掌握的8个核心知识点
编辑 写在前面 使用 cypress 进行端对端测试,和其他的一些框架有一个显著不同的地方,它使用 JavaScript 作为编程语言。 传统主流的 selenium 框架是支持多语言的,大多数 QA 会的 python 和 Java 语言都可以编写 selenium 代码࿰…...
期末复习总结!!【MySQL】库和表的基本操作 + 增删改查CURD
文章目录 前言一、数据库的基本操作1, 查看库2, 创建库3, 使用库4, 删除库 二、表的基本操作1, 创建表2, 查看表3, 查看表结构4, 删除表 三、增加(Create)四、查询(Retrieve) (重点)1, 全列查询2, 指定列查询3, 查询字段为表达式4, 指定别名5, 去重6, 排序7, 条件查询7.1, 基本…...
线上问题处理案例:出乎意料的数据库连接池 | 京东云技术团队
导读 本文是线上问题处理案例系列之一,旨在通过真实案例向读者介绍发现问题、定位问题、解决问题的方法。本文讲述了从垃圾回收耗时过长的表象,逐步定位到数据库连接池保活问题的全过程,并对其中用到的一些知识点进行了总结。 一、问题描述…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
