预约试听:15323438773
  


技术分享

News

机器视觉检测halcon与C#混合编程之环境配置

日期: 2017-07-27
浏览次数: 282

 

机器视觉检测halcon与C#混合编程之环境配置

halcon源程序:

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

read_image (Image, 'C:/Users/BadGuy/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#-halcon./net 程序;(halcon11.0)

 

 

第二步:

新建C#窗体程序

 

第三步:

添加halcondotnet.DLL文件到引用中,并将halconwindow添加至工具箱;

步骤如下:

引用-添加引用-(找到halcon中的halcondotnet.DLL进行添加)

 

第四步:

在工具箱中添加halconWindow控件

打开工具箱,在空白处右键-选择项-浏览,选择下边文件

 

第五步:

在Form1窗口添加一个button和halconWindow控件(工具箱中找halcon图

 第五步:

将导出的程序添加至现有程序的类中(其中就包含using halcondotnet;);

点击项目-添加-现有项-把刚才导出来的类添加进来

第六步:

在Form1.cs中,实例化刚才导进来的类:HDevelopExport HD = new HDevelopExport();

第七步:

在button_click中调用此类的方法:HD.RunHalcon(hWindowControl1.HalconWindow);

C#程序:

namespace Test_cat

{

  public partial class Form1 : Form

  {

    public Form1()

    {

      InitializeComponent();

    }

  HDevelopExport HD = new HDevelopExport();

  private void button1_Click(object sender, EventArgs e)

    {

      HD.RunHalcon(hWindowControl1.HalconWindow);

 

    }

  }

}

 

注意:如果在win64 系统下,则需要将平台更改为X64或者AnyCPU

 

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();

  }

  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()

{

 

//处理程序

}

第四步:填补框架

 

将对应框架下得程序进行填补操作(下边程序可以代替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);

            }

        }

试试运行程序

 

 

News / 推荐新闻 More
2021 - 04 - 07
逆市降价,工业机器人步入千元时代?近日,小编经过两个多小时的地铁转公交后,终于到达了深圳国际会展中心(宝安新馆)。那里正在举行深圳工业展暨第22届深圳机械展,就是在这个展会的机器人与工厂自动化展馆内,小编发现有家东莞的工业机器人公司竟然打出了五轴、六轴机器人,含税8500元/套的价格,这个价格比一些新款旗舰手机的价格都要低。图:展会上有企业打出8500/套出售工业机器人。据该展台的工作人员介绍,8500元是代理价格,需要至少购买10套,而且是只包含机器人本体,并不包含夹具、治具等其他配件。他同时强调,即便不是代理价,他们公司的产品在行业内也是很有竞争力的。至于为什么会在如今涨势一片的时候,他们还会定这样的价格,展台工作人员对表示,他是负责销售的,价格是老板定的,他们只是负责执行。小编还在他们展台拿到了一份产品手册,与其他家的产品手册只有产品介绍不同,该公司还把每个产品的价格都标示出来了。产...
2021 - 03 - 29
电气自动化控制专业术语,你了解多少?控制系统的第一代产生于1930年到1940年,主要代表是以基地式仪表为代表的机械控制技术。第二代产生于1950年,主要是电气控制技术为主的继电器控制技术和调节器为代表的模拟控制技术。目前所称的控制系统是第三代控制系统,诞生于二十世纪七十年代,主要技术代表是用于流程工业的集散控制系统(DCS)和用于离散工业的可编程控制器(PLC)。为了正确理解控制系统的意义,有一些关于控制的术语是必须要了解的,在这里介绍一下。1、I/O点在讨论控制系统的时候,I/O点是最经常听到的一个术语。它是指输入/输出点,I代表INPUT,指输入,O代表OUTPUT,指输出。输入/输出都是针对控制系统而言,输入指从仪表进入控制系统的测量参数,输出指从控制系统输出到执行机构的参量,一个参量叫做一个点。一个控制系统的规模有时按照它最大能够控制的I/O点的数量来定的。2、模拟量和开关量在控...
2021 - 03 - 23
物联网设备如何改变楼宇自动化行业?      物联网设备如何改变楼宇自动化行业?在传统的自动化建筑中,安装了一个独立的专有网络,来与环境系统和简单设备进行通信。该网络连接到控制器,然后连接到传感器和终端设备,如风扇,加热或冷却阀门,以及实施控制环境的风门。先进的系统被绑定到建筑物的IT基础设施中,从而允许建筑物信息与其他系统共享,或实现网络安全。这些集成通常发生在构建系统的前端或运行自动化网络的顶级控制器上。这使得建筑自动化网络在最低级别暴露出来,因为运行建筑的专有网络不一定与在IT级别实现的安全兼容。因此,许多系统与楼宇内的IT网络分离,或者对安全性做出妥协。然而,楼宇自动化设备的趋势正在将我们带向另一个方向。越来越多的传感器、执行器和控制器被设计成具有物联网功能。物联网设备       简单地看一下什么定义了物联网设...
2021 - 03 - 20
详解工业机器人的结构、驱动及技术一、常用运动学构成1、笛卡尔操作臂 优点:很容易通过计算机控制实现,容易达到高精度。 缺点:妨碍工作, 且占地面积大, 运动速度低, 密封性不好。①焊接、搬运、上下料、包装、码垛、拆垛、检测、探伤、分类、装配、贴标、喷码、打码、(软仿型)喷涂、目标跟随、排爆等一系列工作。 ②特别适用于多品种,便批量的柔性化作业,对于稳定,提高产品质量,提高劳动生产率,改善劳动条件和产品的快速更新换代有着十分重要的作用。2、铰链型操作臂(关节型) 关节机器人的关节全都是旋转的, 类似于人的手臂,工业机器人中最常见的结构。它的工作范围较为复杂。 ①汽车零配件、模具、钣金件、塑料制品、运动器材、玻璃制品、陶瓷、航空等的快速检测及产品开发。 ②车身装配、通用机械装配等制造质量控制等的三坐标测量及误差检测。 ③古董、艺术品、雕塑、卡通人物造型、人像制品等的快速原型制作。④汽车整车现...
技术分享
 
2021 / 04 / 07
逆市降价,工业机器人步入千元时代?近日,小编经过两个多小时的地铁转公交后,终于到达了深圳国际会展中心(宝安新馆)。那里正在举行深圳工业展暨第...
 
联系方式

深圳市龙华新区观澜第三工业区观中街5号联为科技园

1505031685@qq.com

15323438773 杨老师  

0755-29495142

预约免费试听
  • 您的姓名:
  • *
  • 公司名称:
  • 地址:
  • 电话:
  • *
  • 传真:
  • E-mail:
  • 邮政编码:
  • 留言主题:
  • 详细说明:
  • *
     
联为智能教育专业打造自动化教育产、学、研一体化平台,成为智能制造教育领导者。联为plc培训班精心打造专业培训实操基地,专门为学员研发一批教学设备,包括机器人学习教学连线,plc培训学习教学连线,工业机器人培训、plc编程培训等专业的教学设备,让学员真正理论实践一体,学以致用,从实践交流中体会知识的精髓,来一场完美的职业转身。
扫码学习
深圳联为智能教育感谢您的关注!
plc学习
在线直播间
plc培训班
小胡老师
Copyright ©2005 - 2013 深圳市联为智能教育有限公司


犀牛云提供企业云服务
5
电话
  • 15323438773
6
二维码
回到顶部