预约试听:15323438773
  


技术分享

News

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

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

 

机器视觉检测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 - 01 - 12
联为开年福利大放送一年仅一次订金报名享优惠2021年1月5日——2021年1月31日PLC编程课程内容:三菱FX3U/FX5U优惠500元          立即预定PLC编程+机器人课程内容:安川/发那科优惠1000元          立即预定机器视觉全套课程内容:C#/Halcon图像处理/运动控制卡(固高/雷赛)/爱普生机器人4轴/6轴优惠2000元         立即预定凡是在2021年3月新班报道的学员,除以上优惠外还可以额外享受住宿减免优惠(活动仅限全日制有效)。地址:深圳市龙华区观澜镇第三工业区观中街5号联为科技园
2021 - 01 - 11
详解机器视觉的光源基础与选型技巧一套完整的视觉检测系统主要包含图像采集部分和图像分析部分,而图像采集部分主要有工业相机、工业镜头以及机器视觉光源承担,今天我们主要介绍机器视觉光源的相关基础知识及选型技巧。首先我们需要了解,机器视觉中的光源起到哪些作用: 1、照亮目标,提高亮度;2、形成有利于图像处理的成像效果,降低系统的复杂性和对图像处理算法的要求;3、克服环境光干扰,保证图像稳定性,提高系统的精度、效率; 通过恰当的光源照明设计,可以使图像中的目标信息与背景信息得到最佳分离,这样不仅大大降低图像处理的算法难度,同时提高系统的精度和可靠性,但非常遗憾,目前没有一个通用的机器视觉照明系统,可以应对不同的检测要求,因此针对每个特定的案例,都需要设计适应的照明装置,以达到最佳效果,而不合适的照明,则会引起很多问题,机器视觉光源如此重要,却往往被很多人忽视。 目前机器...
2021 - 01 - 09
自动化项目实施的六大挑战和五个最佳实践策略企业可以通过遵循最佳实践来减轻项目风险,这些最佳实践例包括利用工厂现有技术和标准化政策。自动化项目的管理和执行正面临着许多看起来非常复杂的挑战。制造企业必须改变并适应快速发展的市场,否则将面临失去竞争力的风险。控制系统技术和智能现场设备的进步,正在改变制造企业查看其过程自动化的方式。对于那些希望提高资产利用率、访问实时数据、改善控制功能和增强连通性的企业来说,机会比比皆是。对于许多制造企业而言,维持现状已不再是一种很好的选择。它们必须改变,否则将面临在市场上失去竞争力的风险。但是,许多制造企业发现一些自动化项目因其固有的复杂性、不断演变的范围、日新月异的技术和人员交互而变得难以管理和执行。项目团队应该如何克服这些挑战,并利用创新技术来提高运营效率和绩效?没有一个简单的答案,但是意识到存在诸多挑战,努力管理和克服挑战是一个好的开始。一、自动化项目的6...
2021 - 01 - 07
推进自动化时要注意什么?本章给大家介绍一下丰田生产方式两大支柱之一的自働化。一、自働化有两层意思:一是不制造不合格品,也就是“质量在过程中被生产出来”的意思。最差也要做到不合格品发生的时候立刻停止,修复后再考虑下次不会产生不合格的管理办法。在大野先生的时代,自动设备即使做出了不合格品还会继续运转下去,他看到这个现象,把自动设备称为“不合格制作机”。不制造不合格品的思想包含在只有手工作业的生产线,如果发生不合格品不停线,仍然继续生产的状态称为“没有做到自动化”。另一层含义是大家经常讲的,即把人的作业用设备代替的意思。一个是指导入使作业人员的工作变轻松的省力化设备。虽然导入了自动设备,但离不开人,而是使作业人员增加了很多等待的时间。本人非常不喜欢这样的自动化。另一种是,真正能够省去人员的自动化。自働化包含让质量被生产出来和省人化两层意思,本章将详细讨论这两方面的内容。 二、可以停止的...
技术分享
 
2021 / 01 / 12
联为开年福利大放送一年仅一次订金报名享优惠2021年1月5日——2021年1月31日PLC编程课程内容:三菱FX3U/FX5U优惠500元&...
 
联系方式

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

1505031685@qq.com

15323438773 杨老师  

0755-29495142

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


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