全国服务热线:

15861139266

halcon与C#混合编程之Halcon代码调用,苏州PLC培训,苏州上位机培训,苏州机器视觉培训,苏州工业机器人培训,苏州电工培训
发布时间:2023-04-21 13:56:24 点击次数:305

halcon与C#混合编程之Halcon代码调用

完成halcon与C#混合编程的环境配置后,进行界面布局设计构思每一个按钮所需要实现的功能,将Halcon导出的代码复制至相应的C#模块下即可。


 


halcon源程序:


dev_open_window(0, 0, 512, 512, 'black', WindowHandle)


read_image (Image, 'C:/Users/Administrator/Desktop/猫.jpg')


dev_display(Image)


get_image_size(Image, Width, Height)


rgb3_to_gray(Image, Image, Image, ImageGray)


dev_display(ImageGray)


注意:写halcon程序时,如果过程中的图片需要显示出来,则需要在每个过程中都添加dev_display(**)


第一步:导出C#程序,建立项目,并添加此类


 


//


//  File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0


//


//  This file is intended to be used with the HDevelopTemplate or


//  HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#


using System;


using HalconDotNet;


public partial class HDevelopExport


{


  public HTuple hv_ExpDefaultWinHandle;


  // Main procedure 


  private void action()


  {


    // Local iconic variables 


    HObject ho_Image, ho_ImageGray;


    // Local control variables 


    HTuple hv_Width, hv_Height;


    // Initialize local and output iconic variables 


    HOperatorSet.GenEmptyObj(out ho_Image);


    HOperatorSet.GenEmptyObj(out ho_ImageGray);


    //dev_open_window(...);


    ho_Image.Dispose();


    HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");


    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);


    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);


    ho_ImageGray.Dispose();


    HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);


    HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);


    ho_Image.Dispose();


    ho_ImageGray.Dispose();


  }

大林上位机机器视觉_苏州电工培训_苏州PLC培训_苏州上位机培训_苏州机器视觉培训_苏州工业机器人培训_最适合电工及plc编程人员学习的上位机机器视觉课程 大林老师:15861139266(微信同号)

  public void InitHalcon()


  {


    // Default settings used in HDevelop 


    HOperatorSet.SetSystem("do_low_error", "false");


  }


  public void RunHalcon(HTuple Window)


  {


    hv_ExpDefaultWinHandle = Window;


    action();


  }


}


第二步:布局设计


 


本程序需要显示图片的halconWindow控件和读图以及处理图片的两个button控件;


 


第三步:将导出的类进行框架分解


 


如果想在程序中添加不同的按键,比如一个用来打开图片,一个用来处理图片,则就需要将halcon导出的类进行分解;


框架如下:


//定义变量


//初始化halcon


 public void InitHalcon()


  {


   //初始化halcon程序


  }


//读取图片


public void ReadPicture(HTuple Window)


{


//读图程序


 


}


//处理图片


 public void Process()


{


 大林上位机机器视觉_苏州电工培训_苏州PLC培训_苏州上位机培训_苏州机器视觉培训_苏州工业机器人培训_最适合电工及plc编程人员学习的上位机机器视觉课程 大林老师:15861139266(微信同号)


//处理程序


}


第四步:填补框架


 


将对应框架下得程序进行填补操作(下边程序可以代替public partial class HDevelopExport下的所有程序):


//定义变量


public HTuple hv_ExpDefaultWinHandle;


HObject ho_Image, ho_ImageGray;


HTuple hv_Width, hv_Height;


//初始化halcon


public void InitHalcon()


  {


    // Default settings used in HDevelop 


    HOperatorSet.SetSystem("do_low_error", "false");


  }


public void ReadPicture(HTuple Window)


{


    //读图并显示


   hv_ExpDefaultWinHandle = Window;


   HOperatorSet.GenEmptyObj(out ho_Image);


    ho_Image.Dispose();


    HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");


    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);


    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);


 


}


 public void Process()


{


    //处理程序


   HOperatorSet.GenEmptyObj(out ho_ImageGray);


    ho_ImageGray.Dispose();


    HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);


    HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);


    ho_Image.Dispose();


    ho_ImageGray.Dispose();


}


第五步:在主程序Form1.cs中添加程序:


 


①在主程序Form1的类下对刚才添加的类进行实例化:


HDevelopExport hd = new HDevelopExport();


②在按键下添加相应程序


 private void button1_Click(object sender, EventArgs e)


 {


       hd.ReadPicture(hWindowControl1.HalconWindow);


  }


 private void button2_Click(object sender, EventArgs e)


{


      hd.Process();


 }


此步骤完成之后,程序可以运行。


附加步骤1:


 


在以上程序中,已经可以将图片显示出来,并进行处理,但由于窗口与图片的大小不一致,导致在显示窗口中不能适应程序窗口的大小,下面是解决此类问题的方法:


在读图程序中,将获取图片的大小的程序HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);放在显示图片之前,并在显示图片程序之前加入下面程序:


HOperatorSet.SetPart(hv_ExpDefaultWinHandle, 0, 0, hv_Height - 1, hv_Width - 1);然后图片就可以适应窗口大小。


此步骤也可以在halcon中更改。


附加步骤2:


 


如果想在程序中能够打开本地文件夹的图片进行处理,则需要改以下程序:


注意:①②是添加的类中③④是主程序中


①将public void ReadPicture(HTuple Window)的括号中加入参数,改为public void  ReadPicture(HTuple Window, string ImagePath)


②将 ReadPicture下的程序 HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");改为HOperatorSet.ReadImage(out ho_Image, ImagePath);


③主程序中定义变量string ImagePath


④将button1的程序改成如下:


     private void button1_Click(object sender, EventArgs e)


        {


            OpenFileDialog openFileDialog1 = new OpenFileDialog();


            openFileDialog1.Filter ="JPEG文件|*.jpg*|BMP文件|*.bmp*";


            openFileDialog1.RestoreDirectory = true;


            openFileDialog1.FilterIndex = 1;


            if (openFileDialog1.ShowDialog() == DialogResult.OK)


            {


                ImagePath = openFileDialog1.FileName;


                hd.ReadPicture(hWindowControl1.HalconWindow, ImagePath);


            }


        }


接下来可以试试运行程序。





1.png

立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络