Haclon +c# 实时图像显示

首先第一步用Haclon软件写好实时采集代码:

* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002', 0, -1, AcqHandle)
*打开相机对待侧物体进行测量
grab_image_start (AcqHandle, -1)
while(true)
    grab_image_async (Image, AcqHandle, -1)
    get_image_size (Image, Width, Height)
    dev_set_part (0, 0, Height, Width)
endwhile
close_framegrabber (AcqHandle)

然后打开文件菜单栏选择到处语言导出C# xxx.CS文件,

导出C#代码:


using HalconDotNet;

public partial class HDevelopExport
{
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
  public HDevelopExport()
  {
    // Default settings used in HDevelop
    HOperatorSet.SetSystem("width", 512);
    HOperatorSet.SetSystem("height", 512);
    if (HalconAPI.isWindows)
      HOperatorSet.SetSystem("use_window_thread","true");
    action();
  }
#endif

  // Procedures 
  // Chapter: Graphics / Text
  // Short Description: This procedure writes one or multiple text messages. 
  public void disp_message (HTuple hv_WindowHandle, HTuple hv_String, HTuple hv_CoordSystem, 
      HTuple hv_Row, HTuple hv_Column, HTuple hv_Color, HTuple hv_Box)
  {


    HTuple hv_GenParamName = new HTuple(), hv_GenParamValue = new HTuple();
    HTuple   hv_Color_COPY_INP_TMP = new HTuple(hv_Color);
    HTuple   hv_Column_COPY_INP_TMP = new HTuple(hv_Column);
    HTuple   hv_CoordSystem_COPY_INP_TMP = new HTuple(hv_CoordSystem);
    HTuple   hv_Row_COPY_INP_TMP = new HTuple(hv_Row);

   
    //Convert the parameters for disp_text.
    if ((int)((new HTuple(hv_Row_COPY_INP_TMP.TupleEqual(new HTuple()))).TupleOr(
        new HTuple(hv_Column_COPY_INP_TMP.TupleEqual(new HTuple())))) != 0)
    {

      hv_Color_COPY_INP_TMP.Dispose();
      hv_Column_COPY_INP_TMP.Dispose();
      hv_CoordSystem_COPY_INP_TMP.Dispose();
      hv_Row_COPY_INP_TMP.Dispose();
      hv_GenParamName.Dispose();
      hv_GenParamValue.Dispose();

      return;
    }
    if ((int)(new HTuple(hv_Row_COPY_INP_TMP.TupleEqual(-1))) != 0)
    {
      hv_Row_COPY_INP_TMP.Dispose();
      hv_Row_COPY_INP_TMP = 12;
    }
    if ((int)(new HTuple(hv_Column_COPY_INP_TMP.TupleEqual(-1))) != 0)
    {
      hv_Column_COPY_INP_TMP.Dispose();
      hv_Column_COPY_INP_TMP = 12;
    }
    //
    //Convert the parameter Box to generic parameters.
    hv_GenParamName.Dispose();
    hv_GenParamName = new HTuple();
    hv_GenParamValue.Dispose();
    hv_GenParamValue = new HTuple();
    if ((int)(new HTuple((new HTuple(hv_Box.TupleLength())).TupleGreater(0))) != 0)
    {
      if ((int)(new HTuple(((hv_Box.TupleSelect(0))).TupleEqual("false"))) != 0)
      {
        //Display no box
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat(
            "box");
        hv_GenParamName.Dispose();
        hv_GenParamName = ExpTmpLocalVar_GenParamName;
        }
        }
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat(
            "false");
        hv_GenParamValue.Dispose();
        hv_GenParamValue = ExpTmpLocalVar_GenParamValue;
        }
        }
      }
      else if ((int)(new HTuple(((hv_Box.TupleSelect(0))).TupleNotEqual("true"))) != 0)
      {
        //Set a color other than the default.
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat(
            "box_color");
        hv_GenParamName.Dispose();
        hv_GenParamName = ExpTmpLocalVar_GenParamName;
        }
        }
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat(
            hv_Box.TupleSelect(0));
        hv_GenParamValue.Dispose();
        hv_GenParamValue = ExpTmpLocalVar_GenParamValue;
        }
        }
      }
    }
    if ((int)(new HTuple((new HTuple(hv_Box.TupleLength())).TupleGreater(1))) != 0)
    {
      if ((int)(new HTuple(((hv_Box.TupleSelect(1))).TupleEqual("false"))) != 0)
      {
        //Display no shadow.
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat(
            "shadow");
        hv_GenParamName.Dispose();
        hv_GenParamName = ExpTmpLocalVar_GenParamName;
        }
        }
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat(
            "false");
        hv_GenParamValue.Dispose();
        hv_GenParamValue = ExpTmpLocalVar_GenParamValue;
        }
        }
      }
      else if ((int)(new HTuple(((hv_Box.TupleSelect(1))).TupleNotEqual("true"))) != 0)
      {
        //Set a shadow color other than the default.
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat(
            "shadow_color");
        hv_GenParamName.Dispose();
        hv_GenParamName = ExpTmpLocalVar_GenParamName;
        }
        }
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
        {
        HTuple 
          ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat(
            hv_Box.TupleSelect(1));
        hv_GenParamValue.Dispose();
        hv_GenParamValue = ExpTmpLocalVar_GenParamValue;
        }
        }
      }
    }
    //Restore default CoordSystem behavior.
    if ((int)(new HTuple(hv_CoordSystem_COPY_INP_TMP.TupleNotEqual("window"))) != 0)
    {
      hv_CoordSystem_COPY_INP_TMP.Dispose();
      hv_CoordSystem_COPY_INP_TMP = "image";
    }
    //
    if ((int)(new HTuple(hv_Color_COPY_INP_TMP.TupleEqual(""))) != 0)
    {
      //disp_text does not accept an empty string for Color.
      hv_Color_COPY_INP_TMP.Dispose();
      hv_Color_COPY_INP_TMP = new HTuple();
    }
    //
    HOperatorSet.DispText(hv_WindowHandle, hv_String, hv_CoordSystem_COPY_INP_TMP, 
        hv_Row_COPY_INP_TMP, hv_Column_COPY_INP_TMP, hv_Color_COPY_INP_TMP, hv_GenParamName, 
        hv_GenParamValue);

    hv_Color_COPY_INP_TMP.Dispose();
    hv_Column_COPY_INP_TMP.Dispose();
    hv_CoordSystem_COPY_INP_TMP.Dispose();
    hv_Row_COPY_INP_TMP.Dispose();
    hv_GenParamName.Dispose();
    hv_GenParamValue.Dispose();

    return;
  }

#if !NO_EXPORT_MAIN
  // Main procedure 
  private void action()
  {
    
    // Local iconic variables 

    HObject ho_Image, ho_Regions, ho_ConnectedRegions;
    HObject ho_SelectedRegions, ho_RegionFillUp, ho_Contours1;
    
    // Local control variables 

    HTuple hv_CameraParameters = new HTuple();
    HTuple hv_CameraPose = new HTuple(), hv_X = new HTuple();
    HTuple hv_Y = new HTuple(), hv_AcqHandle = new HTuple();
    HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
    HTuple hv_WindowID = new HTuple(), hv_Row2 = new HTuple();
    HTuple hv_Column2 = new HTuple(), hv_Radius1 = new HTuple();
    HTuple hv_StartPhi1 = new HTuple(), hv_EndPhi1 = new HTuple();
    HTuple hv_PointOrder1 = new HTuple(), hv_RealDiameter = new HTuple();
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.GenEmptyObj(out ho_Regions);
    HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
    HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
    HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
    HOperatorSet.GenEmptyObj(out ho_Contours1);
    //标定得到的相机参数
    hv_CameraParameters.Dispose();
    hv_CameraParameters = new HTuple();
    hv_CameraParameters[0] = 0.189115;
    hv_CameraParameters[1] = 87.4045;
    hv_CameraParameters[2] = 2.21885e-006;
    hv_CameraParameters[3] = 2.2e-006;
    hv_CameraParameters[4] = 2700.85;
    hv_CameraParameters[5] = -118.133;
    hv_CameraParameters[6] = 2592;
    hv_CameraParameters[7] = 1944;
    //相机在世界坐标系中的位姿
    hv_CameraPose.Dispose();
    hv_CameraPose = new HTuple();
    hv_CameraPose[0] = -0.344824;
    hv_CameraPose[1] = 0.0149449;
    hv_CameraPose[2] = 10.9193;
    hv_CameraPose[3] = 0.721803;
    hv_CameraPose[4] = 4.27061;
    hv_CameraPose[5] = 0.733757;
    hv_CameraPose[6] = 0;
    hv_X.Dispose();hv_Y.Dispose();
    HOperatorSet.ImagePointsToWorldPlane(hv_CameraParameters, hv_CameraPose, 100, 
        100, "mm", out hv_X, out hv_Y);

    //Image Acquisition 01: Code generated by Image Acquisition 01
    hv_AcqHandle.Dispose();
    HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", 
        -1, "default", -1, "false", "default", "000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002", 
        0, -1, out hv_AcqHandle);
    //打开相机对待侧物体进行测量
    HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
    HOperatorSet.WaitSeconds(1);
    ho_Image.Dispose();
    HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
    hv_Width.Dispose();hv_Height.Dispose();
    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
    HOperatorSet.SetWindowAttr("background_color","black");
    HOperatorSet.OpenWindow(0,0,hv_Width,hv_Height,0,"visible","",out hv_WindowID);
    HDevWindowStack.Push(hv_WindowID);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
    }

    ho_Regions.Dispose();
    HOperatorSet.Threshold(ho_Image, out ho_Regions, 20, 255);
    ho_ConnectedRegions.Dispose();
    HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);
    ho_SelectedRegions.Dispose();
    HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area", 
        "and", 400000, 10000688);
    ho_RegionFillUp.Dispose();
    HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);
    ho_Contours1.Dispose();
    HOperatorSet.GenContourRegionXld(ho_RegionFillUp, out ho_Contours1, "border");
    hv_Row2.Dispose();hv_Column2.Dispose();hv_Radius1.Dispose();hv_StartPhi1.Dispose();hv_EndPhi1.Dispose();hv_PointOrder1.Dispose();
    HOperatorSet.FitCircleContourXld(ho_Contours1, "algebraic", -1, 0, 0, 3, 1, out hv_Row2, 
        out hv_Column2, out hv_Radius1, out hv_StartPhi1, out hv_EndPhi1, out hv_PointOrder1);

    //显示信息
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetDraw(HDevWindowStack.GetActive(), "margin");
    }
    HOperatorSet.DispCircle(hv_WindowID, hv_Row2, hv_Column2, hv_Radius1);
    //disp_circle (WindowID, Row2, Column2, (Row2 + Column2) % 50)
    hv_RealDiameter.Dispose();
    using (HDevDisposeHelper dh = new HDevDisposeHelper())
    {
    hv_RealDiameter = (hv_Radius1*2)/(100/hv_X);
    }
    using (HDevDisposeHelper dh = new HDevDisposeHelper())
    {
    disp_message(hv_WindowID, ("实际直径:"+hv_RealDiameter)+"mm", "image", hv_Row2, 
        hv_Column2, "black", "true");
    }
    // stop(...); only in hdevelop
    ho_Image.Dispose();
    ho_Regions.Dispose();
    ho_ConnectedRegions.Dispose();
    ho_SelectedRegions.Dispose();
    ho_RegionFillUp.Dispose();
    ho_Contours1.Dispose();

    hv_CameraParameters.Dispose();
    hv_CameraPose.Dispose();
    hv_X.Dispose();
    hv_Y.Dispose();
    hv_AcqHandle.Dispose();
    hv_Width.Dispose();
    hv_Height.Dispose();
    hv_WindowID.Dispose();
    hv_Row2.Dispose();
    hv_Column2.Dispose();
    hv_Radius1.Dispose();
    hv_StartPhi1.Dispose();
    hv_EndPhi1.Dispose();
    hv_PointOrder1.Dispose();
    hv_RealDiameter.Dispose();

  }

#endif


}


在C#开发时,需摘抄部分代码移植到项目工程中,

工程界面:

 工程代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;
using System.Threading;   //开线程取图

namespace haclonC
{
    public partial class Form1 : Form
    {
        //HTuple hv_WindowId;
        //HTuple hv_AcqHandle;

       // HObject ho_Image;
        //HTuple hv_With, hv_Height;

        bool m_fContinueGrab = false;


        public Form1()
        {
            InitializeComponent();
        }
        HObject ho_Image = null;
        HTuple hv_AcqHandle = new HTuple();
        HTuple hv_Width = new HTuple();
        HTuple hv_Height = new HTuple();

        Thread thContiGrab;
        private void buttonpaizhao_Click(object sender, EventArgs e)
        {
            if(m_fContinueGrab == false)
            {
                m_fContinueGrab = true;
                thContiGrab = new Thread(ThreadContinueGrab);
                thContiGrab.Start();
                thContiGrab.IsBackground = true;
                buttonpaizhao.Text = "停止";
            }
            else
            {
                m_fContinueGrab = false;
                thContiGrab.Abort();
                buttonpaizhao.Text = "实时";
            }
        }
        private void ThreadContinueGrab()
        {
             while(true)
            {
                //先销毁对象,否则就会造成内存泄漏
                ho_Image.Dispose();
                //采图显示
                HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle);
                //HOperatorSet.DispObj(ho_Image,hv_WindowId);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HOperatorSet.GenEmptyObj(out ho_Image);
            hv_AcqHandle.Dispose();
            HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive",
                -1, "default", -1, "false", "default", "000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002",
                0, -1, out hv_AcqHandle);
            HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
        }
        HTuple hv_WindowHandle = new HTuple();
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle);
            HDevWindowStack.Push(hv_WindowHandle);//入栈
        }

        private void timer1_tick(object sender, EventArgs e)
        {
            ho_Image.Dispose();

            //hv_AcqHandle.Dispose();
            HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
            //Image Acquisition 01: Do something
            hv_Width.Dispose(); hv_Height.Dispose();
            HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height, hv_Width);
            }
            if (HDevWindowStack.IsOpen())//实时显示
            {
                HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());

            }
        }

        private void hWindowControl1_Load(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;//一定要关闭timer
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
            ho_Image.Dispose();
        }
    }
}

结果显示,

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值