文章目录

Halcon编程

代码导出

创建C#项目

导入Halcon控件

报错处理

显示图像

项目源码

开发环境 


提前说一下,Halcon导出的代码是一个相对独立的类,但是往往我们在使用过程中只需要使用Halcon核心的代码功能就行了,不需要太复杂的周边代码;

所以此次从实用的角度来距离说明;

Halcon编程

首先在HDevelop中编写halcon算法,如下,以解析二维码为例:

*读取图像
read_image (Image, 'img.png')
*创建二维码解码模型
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
*解析二维码
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
*清除模型
clear_data_code_2d_model (DataCodeHandle)

运行:

halcon和pytorch对比 python与halcon联合编程_halcon

代码导出

在Halcon编辑器的菜单栏依次选择 “文件 — 导出”;

halcon和pytorch对比 python与halcon联合编程_halcon和pytorch对比_02

在弹出的导出窗口中,选择导出路径;导出文件选择" C# - HALCON/.NET ";编码选择 " UTF-8 ";然后导出;

halcon和pytorch对比 python与halcon联合编程_Image_03

导出后打开文件就可以看到导出为C#的程序了;

创建C#项目

C#项目创建过程就不说了;

项目引用halcondotnet.dll,在解决方案中添加引用;

halcon和pytorch对比 python与halcon联合编程_c#_04

浏览,在Halcon安装路径下,文件夹 ...\bin\dotnet35 找到halcondotnet.dll;

halcon和pytorch对比 python与halcon联合编程_Image_05

halcon和pytorch对比 python与halcon联合编程_halcon_06

此时已经成功引入:

halcon和pytorch对比 python与halcon联合编程_2d_07

导入Halcon控件

在工具箱中随便一个分类上右键 — “选择项”;

halcon和pytorch对比 python与halcon联合编程_Image_08

halcon和pytorch对比 python与halcon联合编程_c#_09

同样在Halcon安装路径下,文件夹 ...\bin\dotnet35 找到halcondotnet.dll;导入后如图:

halcon和pytorch对比 python与halcon联合编程_halcon和pytorch对比_10

导入后拖到界面上;

halcon和pytorch对比 python与halcon联合编程_halcon_11

添加按钮并双击添加点击事件

halcon和pytorch对比 python与halcon联合编程_halcon_12

添加 "using HalconDotNet; "引入halcon;

halcon和pytorch对比 python与halcon联合编程_halcon和pytorch对比_13

将导出的demo.cs中的 private void action() 函数复制到按钮点击事件下;可根据需要更改函数名称,这里就用action;

并添加弹出读取结果,便于直观观察;

// Main procedure 
  private void action()
  {


    // Local iconic variables 

    HObject ho_Image, ho_SymbolXLDs;

    // Local control variables 

    HTuple hv_DataCodeHandle = null, hv_ResultHandles = null;
    HTuple hv_DecodedDataStrings = null;
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
    //读取图像
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, "img.png");
    //创建二维码解码模型
    HOperatorSet.CreateDataCode2dModel("QR Code", new HTuple(), new HTuple(), out hv_DataCodeHandle);
    //解析二维码
    ho_SymbolXLDs.Dispose();
    HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle, new HTuple(), 
        new HTuple(), out hv_ResultHandles, out hv_DecodedDataStrings);
    //清除模型
    HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);

    ho_Image.Dispose();
    ho_SymbolXLDs.Dispose();

    //弹出解码结果
    MessageBox.Show("解码结果:"+ hv_DecodedDataStrings);

  }

报错处理

运行程序,此时会出现报错:试图加载格式不正确的程序

halcon和pytorch对比 python与halcon联合编程_c#_14

VS菜单 " 生成 — 配置管理器 " ,选择 “ 活动解决方案平台 — 新建 ”;

halcon和pytorch对比 python与halcon联合编程_halcon和pytorch对比_15

弹出窗口中,新建x64平台;然后确定;

halcon和pytorch对比 python与halcon联合编程_c#_16

此时已将平台切换为x64;

halcon和pytorch对比 python与halcon联合编程_2d_17

halcon和pytorch对比 python与halcon联合编程_c#_18

运行程序,点击按钮,便可以弹出来解码结果;

记得将图片放到运行目录下,并命名为 “img.png”

halcon和pytorch对比 python与halcon联合编程_halcon_19

显示图像

这里只是读出了结果,没有显示图像,现在添加显示图像程序:

//显示图像 hWindowControl1.HalconWindow为界面上那个窗口的句柄
HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);

注意要加在 ho_Image.Dispose(); 之前,此句是释放图像的意思;很好理解,图像释放之前显示;

再次运行:

halcon和pytorch对比 python与halcon联合编程_c#_20

项目源码

Github:lizhifun / CSHalconDemo

开发环境 

OS:Win10家庭中文版

Halcon:Halcon 12.0

VS:VS Professional 2017