预约试听:15323438773
  


技术分享

News

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

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

 

机器视觉检测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
2020 - 09 - 08
触摸屏跟PLC通讯1、为什么我做的画面中文不能正常显示,显示的却是乱码?答:这种情况一般都是由于没有选择正确的中文字体造成的,只要选择一下中文字体就可以了,具体操作步骤如下: (1)  在EasyBuilder软件中选择“选项/语言/东方语言”; (2) 在“编辑/系统参数/编辑器/选择字体”,在选择字体对话框中选择一个需要的中文字体,比如宋体等等。并且选择字符集为“Chinese-GB2312”。(3) 存盘,编译,离线模拟,你就可以看到中文字体显示正常了。2、为什么触摸屏下载后出现屏幕无显示的情况呢?怎么解决这个问题呢?答:这很可能是你的触摸屏的硬件版本跟你使用的软件版本不匹配造成的。eView MT500系列触摸屏从2004年2月份就开始陆续将CPU由原来的133MHZ升级到200MHZ,这样硬件版本号由原来的MT5***V3升级为现在的MT5***V4。这样相应的软件版本也由原来的...
2020 - 09 - 07
关于自动化/控制本科学习的思考本文内容:0 为什么写这个主题1 自动化是学什么的1.1 控制问题1.2 从课程设置展开1.3从机器人学展开2 理论与实践的统一2.1 主观思考2.2 实践过程对理论学习的促进3 理论基础与仿真分析3.1 运动预测的例子3.2 串级控制的例子4 总结0 为什么写这个主题在大一第一个学期我就有了些关于理论学习与课外实践的统一性的思考,由于对自己的思考和结论并不自信,就只跟身边几个比较要好的同学交流过。这段时间看了李崇老师的关于自动化/控制的学习经历和经验分享,和东北大学action实验室发布在B站的控制组交流会,很有共鸣,再加上马上开学大二了,也算给自己不完整的大一做一个总结,故打算写一写自己对自动化专业的认识,还有关于理论与实践统一性的思考,以及理论与仿真在我的实践中的运用与我的思考。1 自动化是学什么的我认为认识自动化专业要从本科的课程设置入手。以我的学校哈...
2020 - 09 - 05
DCS/PLC控制系统八大紧急故障处理预案'控制系统是工厂自动化系统的重要组成部分,一旦出现失灵,轻则导致机组非停或可能造成的重大设备损坏事故,影响生产;重则出现安全事故。为了及时、有效、迅速地处理自动控制系统失灵故障,本文列举了DCS/PLC控制系统八大紧急故障处置预案方法,帮助仪表人加强自控系统维护。'在日常控制系统维护中,我们经常会遇到:系统电源全部失去;操作员站全部失去监控且无后备监视手段;控制系统网络瘫痪;控制系统冗余服务器故障;系统单路电源失去;网络失去冗余;系统重要I/O设备(模件、模块)故障;服务器失去冗余;等突发状况,那么针对这几种突发状况,我们应该如何应对呢?按照“安全第一、预防为主、综合治理”的方针,坚持预防治理相结合的原则,以危急事件的预测、预防为基础,以对危急事件过程处理的快捷、准确为核心,以全力保证人身、设备安全为目标,以建立危急事件的长效管理的...
2020 - 09 - 04
新手PLC项目调试七步法!必须收藏了!联为教育电气工控自动化专业专注分享!很多电气的新手在做完电气控制柜以及PLC程序等设计环节后,不清楚调试应如何开始?或者一些人因为不适当的调试方法导致了PLC烧毁等等问题,那么设计完的电气系统应该如何调试?可依照以下七步。一、按照图纸检查回路(未送电状态下)一般PLC系统的图纸包含柜内图纸和柜外图纸两部分;柜内图纸指柜子内部的接线图;柜外图纸是所有接出电气柜的接线图。这一部分需要检查的是:1、图纸设计是否合理,包括各种元器件的容量等等。2、根据图纸检查元器件是否严格按照图纸连接。在这一过程中,最需要注意的地方就是检查电源1、确保回路没有短路。2、确保强弱电没有混合到一起因为PLC电源为24v,一旦因为接线错误导致220V接进PLC里,很容易将PLC或者拓展模块烧毁。二、检查PLC外部回路,也就是俗称的“打点”电源确认完毕后送电,测试输入输出点,这就是俗...
 
联系方式

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

1505031685@qq.com

15323438773 杨老师  

0755-29495142

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


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