Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C#)

简介: Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C#)

Baumer工业相机


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


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


Baumer RAW文件是一种记录了工业相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”。


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


Baumer工业相机通过SDK实现Raw格式的图像保存的技术背景


Baumer工业相机通常通过SDK(Software Development Kit)实现Raw格式的图像保存时,会利用其专门的图像处理模块和数据传输接口来处理原始图像数据。这种方式的技术背景涉及以下几个方面:


  1. 数据采集和传输:Baumer工业相机的SDK会提供用于高速数据采集和传输的接口和功能,以确保从相机传感器捕获到的Raw图像数据可以高效地传输给计算机或其他设备进行处理。


  1. 图像处理和编程接口:Baumer的SDK会提供图像处理的API和工具,以便开发人员可以在采集到的Raw图像数据上进行各种处理操作,包括像素值的访问、图像增强、颜色校正等,从而满足不同应用的需求。


  1. 校准和配置:Baumer的SDK还可以提供各种配置选项和校准工具,以便开发人员可以对相机进行校准和配置,确保从相机获取的Raw图像数据质量和准确性。


  1. 文件格式和保存:Baumer的SDK会支持将处理后的图像数据保存为Raw格式的文件,同时可能也提供其他格式的转换工具和API,以便用户能够导出不同格式的图像数据。


总的来说,Baumer工业相机通过SDK实现Raw格式的图像保存是建立在高速数据传输、图像处理和API支持的基础上,以满足工业和科学领域对高质量图像数据处理的需求。


通过SDK获取相机信息的代码分析


本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,通过BGAPI SDK实现Raw格式的图像保存,从而能够做对应的参数设置和功能开发。


Baumer工业相机回调函数里保存原始图像数据


C#环境下在回调函数里保存Raw图像代码如下所示:

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 again
            mBufferFilled.QueueBuffer();
        }
        else
        {
            #region//获取当前FrameID
            FrameIDInt = (int)mBufferFilled.FrameID;
            OnNotifySetFrameID(FrameIDInt.ToString());
            #endregion
            // //将相机内部图像内存数据转为BGAPI2.Image数据,方便后续直接保存未BRW对应的BRW格式
            BGAPI2.Image p_image = pImgProcessor.CreateImage((uint)mBufferFilled.Width, (uint)mBufferFilled.Height, 
                mBufferFilled.PixelFormat, mBufferFilled.MemPtr, mBufferFilled.MemSize);
            BGAPI2.Image TranImageMono  = pImgProcessor.CreateTransformedImage(p_image, "Mono8");
            //将相机内部图像内存数据转为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
            //回调函数保存图像功能
            if (bSaveImg)
            {
                //使用bitmap自带函数保存
                string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                string saveimagepath = pImgFileDir + "\\" + strtime + ".jpg";
                //bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);
                //使用Baumer自定义Raw格式保存
                saveimagepath = pImgFileDir + "\\" + strtime + ".brw";
                TranImageMono.NodeList["SaveBrw"].Value = saveimagepath;   
                bSaveImg = false;//变量控制单次保存图像
            }
            #region//bitmap的图像数据复制pBitmap
            Bitmap 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
            #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);
            #endregion
            clonebitmap.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;
}
}


Baumer保存Raw图像格式重要核心代码

//将相机内部图像内存数据转为BGAPI2.Image数据,方便后续直接保存未BRW对应的BRW格式
BGAPI2.Image p_image = pImgProcessor.CreateImage((uint)mBufferFilled.Width, (uint)mBufferFilled.Height, mBufferFilled.PixelFormat, mBufferFilled.MemPtr, mBufferFilled.MemSize);
BGAPI2.Image TranImageMono  = pImgProcessor.CreateTransformedImage(p_image, "Mono8");
string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
string saveimagepath = pImgFileDir + "\\" + strtime + ".brw";
//使用Baumer自定义Raw格式保存         
TranImageMono.NodeList["SaveBrw"].Value = saveimagepath;   


Baumer工业相机保存Raw图像格式的测试



Baumer工业相机通过SDK实现Raw格式的图像保存的优势


通过SDK实现Raw格式的图像保存有几个优势:


  1. 灵活性:使用SDK保存图像的原始Raw格式可以保留数据的完整性,而不会出现由JPEG等压缩格式所带来的数据损失。这使得用户可以在后期处理过程中更加灵活地进行调整和编辑,从而获得更高质量的图像。


  1. 捕获更多细节:Raw格式通常能够捕获更多的图像细节和动态范围,使得在后期处理中可以更好地进行曝光和颜色校正,以及减少噪点等工作。


  1. 自定义处理:通过SDK保存Raw格式图像,用户可以利用相机制造商提供的原始数据以及自定义的图像处理算法进行更精细的图像处理,满足特定的应用需求。


Raw格式图像的保存使得用户能够获得更高质量的图像数据,但同时也需要更多的后期处理工作。因此,选择是否保存Raw格式图像取决于具体的应用需求和后期处理能力。


Baumer工业相机通过SDK实现Raw格式的图像保存的行业应用


工业相机通过SDK实现Raw格式的图像保存在许多行业应用中发挥重要作用,包括但不限于:


  1. 检测和测量应用:在制造业中,工业相机通过SDK保存Raw格式的图像可用于精确的检测和测量应用,例如缺陷检测、尺寸测量、外观质量控制等。Raw格式图像的高质量和完整性有助于确保实时检测和测量的准确性。


  1. 医学成像:医疗领域也常常利用工业相机进行医学成像,比如X射线、CT扫描、核磁共振成像等。通过SDK保存Raw格式的图像能够保留更多的图像细节和动态范围,有助于医学图像的后期处理和分析。


  1. 智能交通:在智能交通系统中,工业相机通过SDK保存Raw格式的图像可用于车牌识别、交通监控等应用。Raw格式的图像数据能提供更多细节,有助于提高识别的准确性和可靠性。


  1. 机器视觉:在自动化生产线和机器视觉系统中,工业相机通过SDK保存Raw格式的图像可用于产品检测、识别和定位等应用。Raw格式图像保留了更多的信息,有助于提高机器视觉系统的准确性和稳定性。


总的来说,工业相机通过SDK实现Raw格式的图像保存在需要高质量图像数据、精确测量和复杂分析的行业应用中具有广泛的应用前景。

目录
相关文章
|
2月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
1月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
356 0
|
5月前
|
并行计算 算法 C#
C# Mandelbrot和Julia分形图像生成程序更新到2010-9-14版 支持多线程计算 多核处理器
此文档是一个关于分形图像生成器的介绍,作者分享了个人开发的M-J算法集成及色彩创新,包括源代码和历史版本。作者欢迎有兴趣的读者留言交流,并提供了邮箱(delacroix_xu@sina.com)以分享资源。文中还展示了程序的发展历程,如增加了真彩色效果、圈选放大、历史记录等功能,并分享了几幅精美的分形图像。此外,还提到了程序的新特性,如导入ini文件批量输出图像和更新一批图片的功能。文档末尾附有多张程序生成的高分辨率分形图像示例。
|
5月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
6月前
|
JSON C# 数据格式
C# 处理gzip格式的json
C# 处理gzip格式的json
85 0
|
6月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
225 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
192 3
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
199 3
|
14天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
101 0