Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)

本文涉及的产品
票证核验,票证核验 50次/账号
个人证照识别,个人证照识别 200次/月
企业资质识别,企业资质识别 200次/月
简介: Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)

Baumer工业相机

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


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

Baumer工业相机的BGAPI SDK可以在C#的环境下提供原始的图像数据,直接将Buffer的数据转为Halcon的Hoject数据信息并进行显示。



Baumer工业相机SDK联合Halcon的技术背景

Baumer工业相机SDK是一种软件开发工具包,用于与工业相机通信和图像采集。这些SDK通常包含驱动程序和API,可以让开发人员使用多个编程语言(例如C++、C#、Python)编写应用程序。它们也提供了许多图像参数和相机参数的控制选项,以便满足各种应用需求。


Baumer工业相机的BGAPI SDK可以提供相机的图像原始数据,Halcon具有极为巨大的图像处理库,在图像处理领域非常强大,功能丰富,使用于工业视觉检测。


工业相机的SDK(Software Development Kit)是为了方便开发人员对工业相机进行控制和图像采集而提供的一套软件工具。而Halcon是一款强大的机器视觉软件,能够进行图像处理、分析、识别等多种任务。


将工业相机的SDK图像转换为Halcon图像,是为了实现将工业相机采集到的图像数据导入到Halcon环境中进行处理和分析。这样可以充分利用Halcon的各种图像处理和分析工具,提高图像处理的效率和精度。


这里主要描述如何在C#的平台下实现通过Haclon直接将图像指针数据转换为HObject直接显示的核心代码,该相机为彩色相机,转换步骤较黑白相机图像转换步骤多一些。


代码分析

本文介绍使用Halcon对Baumer的彩色工业相机进行开发时,使用通过BGAPI SDK和Halcon直接进行图像显示的功能。


1.引用合适的类文件

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGAPI2;
using System.Runtime.InteropServices;
using HalconDotNet;

2.在相机图像回调函数里直接使用图像数据转换Halcon进行图像显示

后续进行图像转换为Halcon库的HObject图像并进行拼接和显示的核心代码,如下所示:

static void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{
    try
    {
        BGAPI2.Buffer mBufferFilled = null;
        //System.Drawing.Bitmap pBitmap = null;
        //Byte[] pImgBits;
        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
        {
            //System.Console.Write(" Image {0, 5:d} received in memory address {1:X}\n", mBufferFilled.FrameID, (ulong)mBufferFilled.MemPtr);
            IntPtr imagebuffer = new IntPtr();
            imagebuffer = (IntPtr)((ulong)(mBufferFilled.MemPtr) + mBufferFilled.ImageOffset);
            BGAPI2.Image pImage = actform.pImgProcessor.CreateImage((uint)mBufferFilled.Width, (uint)mBufferFilled.Height, mBufferFilled.PixelFormat, imagebuffer, mBufferFilled.MemSize);
            BGAPI2.Image pTranImage = null;
            pTranImage = pImage.TransformImage("BGR8");
            int w = 0;
            int h = 0;
            w = (int)mBufferFilled.Width;
            h = (int)mBufferFilled.Height;
            actform.prcSource.X = 0;
            actform.prcSource.Y = 0;
            actform.prcSource.Width = w;
            actform.prcSource.Height = h;
            System.Drawing.Imaging.BitmapData bmpdata;
            bmpdata = actform.pBitmap.LockBits(actform.prcSource, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            System.Runtime.InteropServices.Marshal.Copy(pTranImage.Buffer, actform.pImgBits, 0, w * h * 3);
            System.Runtime.InteropServices.Marshal.Copy(actform.pImgBits, 0, bmpdata.Scan0, w * h * 3);
            actform.pBitmap.UnlockBits(bmpdata);
            //Now you have the Imagebuffer and can do everything with it you want
            //HOperatorSet.GenImage1(out actform.HImage1, "byte", w, h, imagebuffer);
            HOperatorSet.GenImageInterleaved(out actform.HImage1, pTranImage.Buffer, "bgr", w, h, -1, "byte", w, h, 0, 0, -1, 0);
            //HOperatorSet.genima
            HOperatorSet.SetPart(actform.HWindowHandle, 0, 0, h - 1, w - 1);
            HOperatorSet.DispObj(actform.HImage1, actform.HWindowHandle);
            pImage.Release();
            pTranImage.Release();
            //queue buffer again
            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工业相机图像通过和Halcon联动的优点

将Baumer工业相机SDK图像与Halcon连接起来可以有几个好处。


提高图像质量:Halcon是一个强大的图像处理和分析软件工具。当你将你的工业相机SDK图像连接到Halcon时,你可以利用它的功能来提高图像的质量。


更大的灵活性: 通过将工业相机SDK的图像连接到Halcon,你可以利用Halcon的灵活性和多功能性。你可以利用其先进的特性和功能,根据你的具体需要,优化你的图像处理工作流程。


更快的处理速度: Halcon对速度进行了优化,可以比其他类似工具更快地执行复杂的图像处理任务。当你将你的工业相机SDK图像链接到Halcon时,你可以受益于它的卓越性能,使你能够快速有效地处理图像。


更容易集成: Halcon的设计是为了与其他工业相机SDK和图像处理工具无缝集成。通过将你的相机SDK图像连接到Halcon,你可以得到两方面的好处:一个强大的图像处理工具和你现有的相机SDK的好处。


更好的结果: 所有这些优势最终都会带来更好的结果。通过使用Halcon来处理你的工业相机SDK图像,你可以优化你的工作流程,提高图像质量,实现更快的结果,从而获得更好的结果和更有效的流程。



Baumer工业相机图像通过和Halcon联动的行业应用

质量控制和检查:

使用Halcon先进的图像处理算法,你可以开发一个质量控制和检查系统,可以识别和分类产品或部件的缺陷和异常。通过将工业相机SDK图像与Halcon连接起来,你可以获取和分析高质量的图像,并进行实时分析。


物体识别和跟踪:

可以利用Halcon的物体识别和跟踪功能来跟踪移动物体或实时识别物体。通过将工业相机SDK与Halcon集成,你可以获得高分辨率的图像,并利用Halcon的图像处理工具来准确地检测和跟踪物体。


条形码和OCR阅读:

利用Halcon的条形码和OCR读取功能,你可以开发出读取和解码工业相机拍摄的图像中的条形码和OCR文本的系统。通过将工业相机SDK图像与Halcon连接起来,你可以捕获高质量的图像,以实现准确可靠的条形码和OCR阅读。


机器人和自动化:

Halcon可用于机器人视觉系统,使机器人能够与环境互动并执行各种任务。通过将工业相机与Halcon连接,你可以在机器人自动化过程中实现实时监控和反馈。


总的来说,将工业相机SDK图像与Halcon连接起来,可以让开发者建立先进的计算机视觉应用,充分利用两种技术的能力。

目录
相关文章
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
90 0
|
6月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
56 0
|
6月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
56 0
|
2月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
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月前
|
存储 传感器 监控
工业相机如何实现实时和本地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
|
14天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
101 0