Baumer工业相机堡盟相机在BGAPI SDK中如何实现Bitmap的复制克隆(C#)

article/2024/7/13 12:38:46

项目场景

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

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

Baumer工业相机的提供的Demo可以在回调函数中将图像Buffer数据转为Bitmap图像格式,但是Bitmap的内存图像是唯一的地址指代的,若不及时复制或者保存出去,则可能会被下一张图像所替代。


技术背景

从工业相机复制和克隆位图图像数据在某些情况下是必要的,例如:

1) 测试和故障排除:复制和克隆图像数据使工程师能够对相机和图像系统进行彻底的测试和故障排除,以确保所有组件都按预期工作。

2)数据分析: 图像数据往往需要进一步分析,用于图像处理、质量控制或其他应用。这需要对原始数据进行多份拷贝,以进行详细的分析和比较。

3) 归档和存储:复制和克隆图像数据也是必要的,以创建备份和存储原始数据供将来使用,而不改变或删除原始数据。


功能分析

Baumer工业相机的提供的Demo可以在回调函数中将图像Buffer数据转为Bitmap图像格式,但是Bitmap的内存图像是唯一的地址指代的,若不及时复制或者保存出去,则可能会被下一张图像所替代。

因此需要及时对已经转换为Bitmap格式的图像数据进行复制和克隆。

核心代码如下所示:

//回调函数中直接将buffer转为Bitmap
#region//Convert BGAPI2.Buffer to Bitmap(it will reduce the additional cost time of callback function)
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));
System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
int nColors = 256;
for (int ix = 0; ix < nColors; ix++)
{uint Alpha = 0xFF;uint Intensity = (uint)(ix * 0xFF / (nColors - 1));palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);
}
bitmap.Palette = palette;string filenameBMP = mBufferFilled.Parent.Parent.Model + "_ImageMono8_" + mBufferFilled.FrameID + "_time_" + mBufferFilled.Timestamp + ".bmp";
string filenameBMP2 = strPath;//对Bitmap图像数据进行复制克隆
#region//Copy the Bitmap to a new Bitmap instance and add it to the list of bitmaps(memory) 
Bitmap clone = (Bitmap)bitmap.Clone();
BitmapData data = clone.LockBits(new Rectangle(0, 0, clone.Width, clone.Height), ImageLockMode.ReadOnly, clone.PixelFormat);
clone.UnlockBits(data);
actform.listOfBitMaps.Add(clone);
#endregion

复制和克隆图像数据的优点

1. 减少数据损失: 通过复制和克隆图像数据,你可以确保图像数据被保存下来,在进一步处理过程中不会丢失。这在图像数据被多个函数或线程处理的情况下尤为重要。

2. 促进并行处理: 克隆图像数据可以使并行处理图像更容易,因为每个线程可以访问一个单独的数据副本而不需要同步。

3.简化图像处理算法: 通过对图像数据的单独拷贝进行处理,可以简化处理算法,因为他们不需要担心修改原始图像数据结构。

4.提高图像质量: 克隆图像数据可以实现图像增强技术的应用,如过滤或分割,而不改变原始图像数据。

总的来说,在工业相机SDK的回调函数中复制和克隆图像数据可以提高图像处理应用的可靠性和性能。


复制和克隆图像数据的行业应用

在Baumer工业相机SDK的回调函数中,复制和克隆图像数据的场景是有用的:

1. 当需要实时处理图像时: 通过在回调函数中复制和克隆图像数据,可以实时处理图像数据而不影响主程序的执行。

2. 当需要多个图像处理模块时: 通过克隆图像数据,可以单独开发和集成多个模块,而且代码依赖性最小。

3. 当数据安全很重要时:通过复制图像数据,可以为后期处理或备份目的保留未修改的数据。

4. 当系统稳定性很重要时:通过克隆图像数据,可以使系统更加稳定,不容易因为共享内存问题而崩溃。

总的来说,在Baumer工业相机SDK的回调功能中复制和克隆图像数据,可以在工业成像应用中获得更大的灵活性、安全性和性能。


http://www.ngui.cc/article/show-1007529.html

相关文章

Go map 内存泄露

前言 在Go中, map这个结构使用的频率还是比较高的. 其实在所有的语言中, map使用的频率都是很高的. 之前在使用中, 一直都知道map的内存在元素删除的时候不会回收, 但一直没有仔细的研究为什么. 今天就来好好揣摩揣摩. func main() {m : make(map[int][128]byte)for i : 0; …

Python参数类型定义、私有函数与变量、全局变量

函数的参数类型定义 参数名 冒号 类型函数函数定义在Python3.7之后可用函数不会对参数类型进行验证 def add(a:int, b:int3):print(a b)add(1, 2) add(hello, xiaomu)def test(a:int, b:int3, *args:int, **kwargs):print(a, b, args, kwargs)test(1, 2, 3, 4, namexiaomu)…

用户态--fork函数创建进程

我们一般使用Shell命令行来启动一个程序&#xff0c;其中首先是创建一个子进程。但是由于Shell命令行程序比较复杂&#xff0c;为了便于理解&#xff0c;我们简化了Shell命令行程序&#xff0c;用如下一小段代码来看怎样在用户态创建一个子进程。 #include <stdio.h> #i…

OceanBase CTO杨传辉:持续降低使用门槛,打造开发者友好的分布式数据库

3月25日&#xff0c;首届OceanBase开发者大会在北京举行。大会发布了OceanBase 4.1版本&#xff0c;公布两大友好工具&#xff0c;升级文档易用性&#xff0c;统一企业版和社区版代码分支&#xff0c;全面呈现了OceanBase打造极致的开发者友好数据库的成果。过去13年&#xff0…

【广州华锐互动】电力线路检测VR实训系统有哪些特色?

在电力系统运行中&#xff0c;故障测试是非常重要的一环&#xff0c;旨在检测和排除系统中可能存在的故障&#xff0c;保障电力系统的正常运行。传统的故障测试方法往往需要在实际场景下进行操作&#xff0c;不仅操作难度较大&#xff0c;而且存在安全隐患&#xff0c;同时操作…

详解内核态与用户态

介绍下内核态与用户态 内核态和用户态是操作系统中的两种不同的运行状态&#xff0c;它们的区别如下&#xff1a; 权限不同&#xff1a;内核态是操作系统拥有最高权限的运行状态&#xff0c;可以访问系统的所有资源&#xff0c;而用户态只能访问受限的资源。 系统调用&#x…

网易云音乐API部署Vercel获取接口过程

前提&#xff1a;部署自己的网易云接口主要用途在于在完成前端的仿网易云播放器的时候&#xff0c;根据自己部署的接口可以用于获取数据。大体流程是通过在github上fork别人的API接口项目&#xff0c;然后在Vercel部署即可获得自己的网易云后端数据接口了&#xff0c;不过根据我…

(五)Tomcat源码阅读:Connector组件分析

一、概述 因为Connector组件没有实现接口规范&#xff0c;因此我们直接对该类的方法进行分析即可。 二、源码阅读 阅读思路&#xff0c;我的阅读思路是这样的&#xff0c;大的类无非就是对小类的使用&#xff0c;因此我们想分析整体的一下架构的化我们就先从大类出发找到比较…

【LeetCode】二叉树的前序遍历(递归,迭代,Morris 遍历)

目录 题目要求&#xff1a;给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 方法一&#xff1a;递归 方法二&#xff1a;迭代 思路分析&#xff1a; 复杂度分析 代码展示&#xff1a; 方法三&#xff1a;迭代进阶 思路分析&#xff1a; 代码展示&…

OpenAI translator + AI vocabulary + scispace + chatpdf 学英语

OpenAI translator AI vocabulary scispace chatpdf 学英语 文章目录OpenAI translator AI vocabulary scispace chatpdf 学英语workflow记录这几个软件都是这波AIGC热潮中的产品下面我要读一下2022美赛E题我分别上传到了chatpdf和scispace&#xff0c; 需要翻译的地方我…