预约试听:15323438773
  


技术分享

News

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

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

 

机器视觉检测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 - 07 - 27
机器视觉检测技术的发展趋势随着工业制造技术及加工工艺的提高与改进,对检测手段、检测速度和精度提出了更高要求,使得机器视觉检测技术在各大行业广泛应用,发展势头强劲。下面,我们就来细数下机器视觉检测发展的几个历程和趋势。1、初级视觉理论:主要针对光学成像的逆问题,是由能从二维光强度阵列恢复三维可见表面物理性质的一系列处理过程组成。这里各过程的输入数据及计算目的都是能够明确描述的,如边缘检测、立体匹配、由运动恢复结构等方法。在三维物体投影成二维图像过程中,三维信息有很多损失,从而导致病态问题产生,因此加强对初级视觉过程及其约束条件的研究就显得格外重要,其主要针对 3D 重建。2、主动视觉理论:主动视觉指观察者以确定或不定方式运动跟踪目标、感知对象的技术方法。在主动视觉中,观察者和目标物体也可同时运动,观察者的运动为研究目标的形状、距离和运动提供了附加条件,重要研究方向为目标跟踪,导弹拦截等。3、...
2021 - 07 - 26
PLC控制柜维护保养21法则一、为什么需要维护1、为了延长使用寿命;2、为了设备运行的稳定性;3、这也是5S的一种体现。二、不维护容易出现的问题电柜太脏会设备短路,打弧,烧坏设备;电柜风扇过滤网堵塞,散热不好会导致设备稳定性差;湿度过大会设备短路;某些大电流位置局部过热时间长了会烧坏设备。三、准备工作各种工具:螺丝刀,扳手,摇表,万用表,钳形电流表;吸尘器;热风枪,记号笔,锉刀等;备件:风扇过滤网,接触器辅助触头,继电器线圈,热缩管,导电膏。人员:不仅需要电工,还需要程序员。因为如果程序员参与,把软件的维护也做起来,可以提前预防消除很多软故障。四、注意事项做好规划,制定详细的步骤,按部就班。永远不要相信一拍脑袋一个主意,而是先把所有的方方面面考虑好,拿着规划一步一步做:1.  安全第一:拆卸设备之前先断电,注意安全;2.  清洁电柜的时候注意不要把灰弄到到处都是;3.&...
2021 - 07 - 20
机器视觉:系统不稳定性因素分析1 引言   机器视觉的研究始于20世纪50年代二维图像的模式识别[1],它起初被设计用来代替人眼从事检测识别的工作,可以大大提高检测的工作效率以及降低人眼疲劳带来的检测结果的不一致性。机器视觉检测发展至今,在许多方面已经发展到可以完成人眼难以完成的工作,如高精度的测量以及对特定产品的高速分级,还有利用红外线、紫外线、X射线等检测技术检测人类视觉无法检测到的事物[2]。但机器视觉系统设计的难点在于如何保证其可靠性与稳定性,无论从光源,相机等硬件上还是从图像处理软件上的设计,对机器视觉的稳定性都有重要影响。   2 机器视觉系统组成典型的机器视觉系统一般由图像的获取、图像的处理和分析、输出或显示三部分组成。按照视觉系统组成结构主要分为两大类:PC或板卡式机器视觉系统(PC-Based Vision System),以及嵌入...
2021 - 07 - 16
资深电气工程师总结的PLC最全编程算法,收藏备用!PLC编程算法(1):开关量PLC中无非就是三大量:开关量,模拟量,脉冲量。搞清楚三者之间的关系,你就能熟练的掌握PLC了。1,开关量也称逻辑量,指的是两个取值,0或1,ON或OFF。它是最常用的控制,对它进行控制是PLC的优势,也是PLC最基本的应用。开关量控制的目的是,根据开关量的当前输入组合与历史的输入顺序,使PLC产生相应的开关量输出,以使系统能按一定的顺序工作。所以,有时也称其为顺序控制。而采用顺序控制又分为手动,半自动或自动。而采用的控制原理有分散,集中与混合控制方式。2,模拟量是指一些连续变化的物理量,如电压,电流,压力,速度,流量等。PLC是由继电控制引入微处理技术后发展而来的,可方便及可靠地利用开关量控制。由于模拟量可转换成数字量,数字量只是多位的开关量,故经转换后的模拟量,PLC也完全可以可靠的进行处理控制。由于连续的生...
技术分享
 
2021 / 07 / 27
机器视觉检测技术的发展趋势随着工业制造技术及加工工艺的提高与改进,对检测手段、检测速度和精度提出了更高要求,使得机器视觉检测技术在各大行业广...
 
联系方式

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

1505031685@qq.com

15323438773 杨老师  

0755-29495142

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


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