Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)

  • Baumer工业相机
  • Baumer工业相机图像保存到电脑内存的技术背景
  • 代码分析
    • 注册SDK回调函数BufferEvent
    • 声明可以存储相机图像的内存序列和名称
    • 在图像回调函数中将图像保存在内存序列中
    • 从内存序列中释放保存的相机图像
    • 保存工业相机图像到内存的测试
  • Baumer工业相机通过电脑内存存储的优势
  • Baumer工业相机通过电脑内存存储的行业应用

Baumer工业相机

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

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

Baumer工业相机的实时帧率是工业相机的一个重要参数,因为它影响相机准确捕捉快速移动物体或事件的能力。分辨率、图像质量和可用存储空间等因素也会影响工业相机的帧率。

Baumer工业相机的Camera Explorer软件功能强大,内容丰富,通过该软件可以有效的获取相机相关的全部信息,在对于相机检测项目的开发中,有时需要获取相机中图像Buffer信息和相关的数据流信息,而Camera Explorer软件可以有效的显示相关的信息。

Baumer工业相机图像保存到电脑内存的技术背景

工业相机将相机图像保存到电脑内存的过程涉及多种技术背景。当工业相机捕获图像时,涉及到图像传感器、数据传输、图像处理和存储等方面的技术。以下是一些涉及到的技术背景:

图像传感器技术:工业相机的核心是图像传感器,它负责将光学图像转换成电子信号。不同类型的图像传感器(如CCD、CMOS)具有不同的工作原理和性能特点,对于图像的质量和处理方式有着重要影响。

数据传输技术:一旦图像被捕获,它需要被传输到计算机内存进行存储和处理。这涉及到数据传输接口(如USB、Ethernet、Camera Link)以及数据传输协议的选用,确保图像能够快速、稳定地传输到计算机内存中。

图像处理技术:在图像被保存到内存之前,通常需要进行一定程度的图像处理,例如白平衡校正、曝光补偿、降噪等。这些图像处理技术有助于提高图像质量和信息的准确性。

存储技术:一旦图像被传输到计算机内存,它需要被存储在磁盘或其他存储设备中。这涉及到文件系统、存储介质、数据压缩等技术,以确保图像能够被有效地存储和管理。

代码分析

本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,使用回调函数BufferEvent进行图像保存在本地内存的方式进行高速存储的功能。

注册SDK回调函数BufferEvent

C#环境下注册回调函数BufferEvent库代码如下所示:

foreach (BGAPI2.DataStream CurDataStream in ListDataStream)
{CurDataStream.RegisterNewBufferEvent(BGAPI2.Events.EventMode.EVENT_HANDLER);CurDataStream.NewBufferEvent += new BGAPI2.Events.DataStreamEventControl.NewBufferEventHandler(mDataStream_NewBufferEvent2TestSpeed);CurDataStream.StartAcquisition();
}

声明可以存储相机图像的内存序列和名称

C#环境下代码如下所示:

 List<Bitmap> listOfBitMaps;List<string> listNameOfBitMaps;listOfBitMaps = new List<Bitmap>();
listNameOfBitMaps = new List<string>();

在图像回调函数中将图像保存在内存序列中

C#环境下代码如下所示:

public int SetImageCount = 0; public int SetImageSaveNumber = 0; public int SetImageCount2 = 0;
public int ControlConfigSaveFPS = 1; public bool NormalDisplay = false;
void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{try{BGAPI2.Buffer mBufferFilled = null;              mBufferFilled = mDSEvent.BufferObj;if (mBufferFilled == null){MessageBox.Show("Error: Buffer Timeout after 1000 ms!");}else if (mBufferFilled.IsIncomplete == true){//MessageBox.Show("Error: Image is incomplete!");//queue buffer againmBufferFilled.QueueBuffer();}else{#region//获取当前FrameIDFrameIDInt = (int)mBufferFilled.FrameID;if (NormalDisplay)OnNotifySetFrameID(FrameIDInt.ToString());#endregion//将相机内部图像内存数据转为bitmap数据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));#region//Mono图像数据转换。彩色图像数据转换于此不同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;#endregion#region//bitmap的图像数据复制pBitmapBitmap clonebitmap = (Bitmap)bitmap.Clone();BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);clonebitmap.UnlockBits(data);pBitmap = clonebitmap;#endregion//回调函数保存图像功能if (bSaveImg){SetImageCount = SetImageCount + 1;//使用bitmap自带函数保存string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");ulong ts = mBufferFilled.Timestamp;string saveimagepath = pImgFileDir + "\\" + strtime + "-" + FrameIDInt + ".bmp";#region//存储当前图片时间戳作为名称,与图片对应起来listNameOfBitMaps.Add(saveimagepath);                       //存储当前图片放入电脑内存中listOfBitMaps.Add(clonebitmap);if (SetImageCount == SetImageSaveNumber){pDevice.RemoteNodeList["AcquisitionStop"].Execute();bSaveImg = false;MemorySave.Checked = false;OnNotifySetFrameID(SetImageCount.ToString());}#endregion}if (NormalDisplay){#region//将pBitmap图像数据显示在UI界面PictureBox控件上prcSource.X = 0; prcSource.Y = 0;prcSource.Width = (int)mBufferFilled.Width; prcSource.Height = (int)mBufferFilled.Height;System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);#endregionclonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间}mBufferFilled.QueueBuffer();}}catch (BGAPI2.Exceptions.IException ex){{string str2;str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());MessageBox.Show(str2);}}return;
}

从内存序列中释放保存的相机图像

C#调用代码如下所示:

List<Bitmap> listOfBitMaps;
List<string> listNameOfBitMaps;
//释放相机占用的电脑内存图像并保存到本地
private void RealeaseDataFromMemory3()
{int count1 = 0; int width1 = 0; int Height1 = 0; string PixelFormatstr = "";try{foreach (Bitmap BitmapCur in listOfBitMaps){string name1 = listNameOfBitMaps[count1];Bitmap BitmapCurNew = BitmapCur;OnNotifySaveImage2(BitmapCurNew, name1);count1++;SetImageCount2 = SetImageCount2 + 1;}}catch (Exception ex1){OnNotifyShowRecieveMsg(ex1.Message + "-" + count1 + "-" + width1 + "-" + PixelFormatstr);}OnNotifyShowRecieveMsg("内存释放图像保存完成");
}private delegate void dgNotifySaveImage2(Bitmap bmp, string name1);
private dgNotifySaveImage2 OnNotifySaveImage2;private void SetSaveImage2(Bitmap contents, string name1)
{if (this.InvokeRequired){this.Invoke(new dgNotifySaveImage2(SetSaveImage2), contents, name1);}else{ImgSave2(contents, name1);}}private int ImgSave2(Bitmap bmpinstance, string name1)
{#region 保存图片//stopWatch.Start();//OnNotifyShowRecieveMsg("save....");DateTime dtNow = System.DateTime.Now;  // 获取系统当前时间String strPath;String strtime;strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");//ImagePersistence.Save(ImageFileFormat.Png, stfFileName, grabResult);bmpinstance.Save(name1, System.Drawing.Imaging.ImageFormat.Bmp);//OnNotifyShowRecieveMsg("save:" + strtime);return 0;#endregion
}

保存工业相机图像到内存的测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Baumer工业相机通过电脑内存存储的优势

工业相机通过电脑内存进行图像存储具有许多优势,包括:

  1. 高速存储:电脑内存通常具有较高的读写速度,这意味着工业相机可以快速地将图像数据传输到计算机内存中,而且处理速度也会更快。

  2. 大容量存储:现代计算机内存通常具有大容量,可以存储大量的图像数据。这意味着工业相机可以在不间断地进行图像捕获的情况下,将大量图像数据存储到内存中,而无需担心空间问题。

  3. 灵活性:通过将图像存储到计算机内存,用户可以方便地对图像数据进行访问、处理和传输。此外,可以轻松地实现实时图像处理和分析,因为存储在内存中的图像数据可立即用于计算和算法处理。

  4. 数据传输便利:一旦图像存储在计算机内存中,它可以通过各种方式进行传输,如网络传输、存储到磁盘或其他外部设备,以及实时显示等,这为图像数据的使用和共享提供了便利。

总的来说,工业相机通过电脑内存存储图像数据具有高速存储、大容量、灵活性和便利的优势,有助于满足现代工业应用对图像处理和数据传输的要求。

Baumer工业相机通过电脑内存存储的行业应用

工业相机通过电脑内存进行图像存储在许多行业和应用领域中发挥着重要作用,包括但不限于:

  1. 自动化制造:工业相机通过电脑内存存储的图像数据可以用于自动检测和品质控制,例如在生产线上检测产品的尺寸、外观、缺陷等。此外,内存存储的图像数据还可用于生产过程监控、工艺优化和自动化控制。

  2. 医学影像:在医学领域,工业相机通过电脑内存存储的图像可以用于医学影像诊断、手术导航、病理学研究等应用。内存存储的高速数据传输和大容量存储使得医学图像可以快速实时地进行处理和分析。

  3. 机器视觉:工业相机通过内存存储的图像数据被广泛应用于机器视觉系统中,用于目标检测、识别、测量和导航。这些应用需要快速、准确地处理大量图像数据,而内存存储技术正好满足了这些需求。

  4. 智能交通:在交通监控和管理中,工业相机通过电脑内存存储的图像数据可以用于车辆识别、交通流量监测、违章行为检测等应用。这些应用需要对大量实时图像数据进行快速处理和分析。

  5. 军事和航空航天:在军事和航空航天领域,工业相机通过内存存储的图像数据可用于目标识别、导航、监视和情报收集。高速、稳定的内存存储技术对于在复杂环境中进行实时图像处理至关重要。

通过电脑内存存储的工业相机图像数据在这些行业应用中发挥着关键作用,促进了自动化、智能化和数据驱动的发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为配置流量抑制示例

如拓扑图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要限制二层网络转发的广播、未知组播和未知单播报文&#xff0c;防止产生广播风暴&#xff0c;同时限制二三层网络转发的已知组播和已知单播报文&#xff0c;防止大流量冲击。 配置思路 用如下…

利用STM32内置Bootloader实现USB DFU固件升级

本文将介绍如何利用STM32内置的Bootloader来实现USB DFU&#xff08;Device Firmware Upgrade&#xff09;固件升级功能。首先&#xff0c;我们会介绍USB DFU的原理和工作流程。然后&#xff0c;我们将详细讲解如何配置STM32芯片以支持USB DFU&#xff0c;并提供相应的代码示例…

MySQL授权密码

mysql> crate databases school charcter set utf8; Query OK, 1 row affected, 1 warning (0.00 sec) 2.在school数据库中创建Student和Score表 mysql> use school Database changed mysql> create table student-> -> (id int(10) primary key auto_incremen…

介绍几个有意思的 GitHub 仓库

大家好&#xff0c;我是风筝。 今天介绍几个很有意思的 github 开源项目&#xff0c;看过之后就会发现&#xff0c;github 果然深意暗藏。 GitHub对于程序员来说&#xff0c;再熟悉不过了&#xff0c;绝大多数时候&#xff0c;我们到上面都是为了学习高质量的源代码&#xff…

深信服技术认证“SCSA-S”划重点:XSS漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

Python实现FA萤火虫优化算法优化XGBoost分类模型(XGBClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

docker 的初步认识,安装,基本操作

docker相关知识 docker的相关概念 docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的linux服务器&#xff0c;也可以实现虚拟…

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…

Django回顾 - 6 Ajax

【1】Ajax 定义&#xff1a; 异步Javscript和XML 作用&#xff1a; Javascript语言与服务器(django)进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xff09; 同步交互和异步交互&#xff1a; 1、同步交互&…

如何解决syntaxerror: more than 255 arguments 报错

如何解决syntaxerror: more than 255 arguments 报错 问题背景解释解决方案 问题背景 今天拼接特征的时候&#xff0c;突然代码报错syntaxerror: more than 255 arguments &#xff0c;看了一下感觉这个报错非常有意思&#xff0c;估计平时也是没机会碰到&#xff0c;和大家分…

用Mnesia为cache增加分布式支持

一&#xff1a;分布式缓存 1.选取通信策略 在设计分布式程序时&#xff0c;可供选择的通信方式主要有两种&#xff1a;异步通信和同步通信。采用异步通信时&#xff0c;发送方无须等待任何确认或应答。而在采用同步通信时&#xff0c;发送方会处于挂起状态&#xff0c;直至收…

Stable Diffusion AI绘画系列【17】:绘本童话风格场景

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&…

制作蓝牙小车

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分三个部分&#xff08;app制作&#xff0c;蓝牙小车硬件制作&#xff0c;小车程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstu…

MongoDB知识总结

这里写自定义目录标题 MongoDB基本介绍MongoDB基本操作数据库相关集合相关增删改查 MongoDB基本介绍 简单介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产…

【Hive】——数据仓库

1.1 数仓概念 数据仓库&#xff08;data warehouse&#xff09;&#xff1a;是一个用于存储&#xff0c;分析&#xff0c;报告的数据系统 目的&#xff1a;是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持 特点&#xff1a; 数据仓库本身不产生任何数据…

Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第一章、传统SSM开发回顾以及问题 Spring SpringMVC Mybatis SSM 实现一个简单功能 员工添加、查询… SSM项目简单实现 项目 需求分析 —>概要设计 —>&#xff08;库表设计&#xff09; —> 详细…

从零开始的c语言日记day40——字符函数和字符串函数——内存函数

常用函数介绍 求字符串长度 strlen 长度不受限制的字符串函数 Strcpy Strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 Strstro strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset Memcmp 使用Asser…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)

文章目录 一、应用生命周期二、生命周期函数定义三、生命周期五函数练习 一、应用生命周期 1、定义 应用生命周期就是代表了一个HarmonyOS应用中所有页面从创建、开启到销毁等过程的全生命周期。查看路径如下&#xff1a; Project/entry/src/main/ets/entryability/EntryAbili…