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连接起来可以有几个好处。

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

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

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

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

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

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

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

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

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

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

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

05-27 02:05